// mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QIcon> #include <QMessageBox> #include <QSqlQuery> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // 初始化数据库(原有逻辑) loadDatabase(); // 创建并配置工具栏(关键新增部分) setupToolBar(); // 设置主窗口默认大小 setGeometry(100, 100, 800, 600); setWindowTitle("动态图标工具栏示例"); } MainWindow::~MainWindow() { db.close(); } // 配置工具栏及动作(核心函数) void MainWindow::setupToolBar() { // 1. 创建工具栏并设置样式 mainToolBar = new QToolBar("Main Toolbar", this); mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 图标下显示文本 mainToolBar->setMovable(false); // 禁止拖动工具栏 addToolBar(Qt::TopToolBarArea, mainToolBar); // 固定在顶部 // 2. 创建动作并绑定图标(资源路径必须与.qrc一致) actAddFold = new QAction(QIcon(":/new/addfold.svg"), "AddF", this); actAddFold->setToolTip("添加文件夹 (Add Folder)"); connect(actAddFold, &QAction::triggered, this, &MainWindow::onAddFold); actAddLine = new QAction(QIcon(":/new/addline.svg"), "AddL", this); actAddLine->setToolTip("添加行 (Add Line)"); connect(actAddLine, &QAction::triggered, this, &MainWindow::onAddLine); actDeleteLine = new QAction(QIcon(":/new/deleteline.svg"), "DelL", this); actDeleteLine->setToolTip("删除行 (Delete Line)"); connect(actDeleteLine, &QAction::triggered, this, &MainWindow::onDeleteLine); actDelFold = new QAction(QIcon(":/new/delfold.svg"), "DelF", this); actDelFold->setToolTip("删除文件夹 (Delete Folder)"); connect(actDelFold, &QAction::triggered, this, &MainWindow::onDelFold); actInline = new QAction(QIcon(":/new/inline.svg"), "Inline", this); actInline->setToolTip("合并内容 (Inline Content)"); connect(actInline, &QAction::triggered, this, &MainWindow::onInline); actPreview = new QAction(QIcon(":/new/preview.svg"), "Prev", this); actPreview->setToolTip("预览 (Preview)"); connect(actPreview, &QAction::triggered, this, &MainWindow::onPreview); // 3. 将动作添加到工具栏 mainToolBar->addAction(actAddFold); mainToolBar->addAction(actAddLine); mainToolBar->addAction(actDeleteLine); mainToolBar->addAction(actDelFold); mainToolBar->addAction(actInline); mainToolBar->addAction(actPreview); } // 功能槽函数实现(根据需求调整) void MainWindow::onAddFold() { QMessageBox::information(this, "AddF", "触发添加文件夹功能"); // 实际逻辑:操作文件系统或数据库添加文件夹记录 } void MainWindow::onAddLine() { if (!sqlModel) return; int row = sqlModel->rowCount(); sqlModel->insertRow(row); // 表尾插入空行 sqlModel->select(); // 刷新表格数据 updateTextEdit(); // 同步更新textEdit } void MainWindow::onDeleteLine() { if (!sqlModel) return; QModelIndex currentIndex = ui->tableView->selectionModel()->currentIndex(); if (currentIndex.isValid()) { sqlModel->removeRow(currentIndex.row()); // 删除选中行 sqlModel->submitAll(); // 提交修改 sqlModel->select(); // 刷新表格 updateTextEdit(); // 同步更新textEdit } } void MainWindow::onDelFold() { QMessageBox::information(this, "DelF", "触发删除文件夹功能"); // 实际逻辑:删除文件系统或数据库中的文件夹记录 } void MainWindow::onInline() { QMessageBox::information(this, "Inline", "触发内容合并功能"); // 实际逻辑:合并tableView中选中的多行数据(需补充选中行获取逻辑) } void MainWindow::onPreview() { updateTextEdit(); // 刷新textEdit内容(原有逻辑) QMessageBox::information(this, "Prev", "文本已同步数据库最新数据"); } // 原有数据库初始化(保留) void MainWindow::loadDatabase() { db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("lyshark-1.db"); if (!db.open()) { QMessageBox::critical(this, "错误", "数据库打开失败"); return; } // ...(表结构创建、模型初始化等原有代码) } // 原有文本更新(保留) void MainWindow::updateTextEdit() { if (!ui->textEdit || !sqlModel) return; ui->textEdit->clear(); for (int i = 0; i < sqlModel->rowCount(); ++i) { QString rowText; for (int j = 0; j < sqlModel->columnCount(); ++j) { rowText += sqlModel->data(sqlModel->index(i, j)).toString() + "\t"; } ui->textEdit->append(rowText.trimmed()); } } 只列出新增部分
时间: 2025-07-25 11:29:29 浏览: 13
<think>好的,我现在需要解决用户的问题:用户提供了一个`mainwindow.cpp`的代码,并要求只列出其中的新增部分。首先,我需要仔细阅读用户提供的代码,识别出相对于原始代码(比如之前的版本)新增的部分。
首先,用户提到这是在Qt上通过.cpp插入图标的代码,且xml不可编辑。所以重点应该是动态创建工具栏和动作的部分。
看`MainWindow`的构造函数,里面调用了`loadDatabase()`(原有逻辑)和`setupToolBar()`(新增部分)。然后是`setupToolBar()`函数,这是新增的,用于创建工具栏和动作。
接下来,头文件中可能需要声明新增的成员变量,比如`mainToolBar`和各个动作指针(`actAddFold`等),但用户提供的代码是`mainwindow.cpp`,所以可能不需要头文件的内容,但需要看cpp中的新增函数和变量。
在`mainwindow.cpp`中,新增的部分应该包括:
1. `setupToolBar()`函数的定义,这是核心的新增函数,用于创建工具栏和绑定动作。
2. 各个动作指针(`actAddFold`、`actAddLine`等)的定义和初始化。
3. 功能槽函数的实现,如`onAddFold()`、`onAddLine()`、`onDeleteLine()`、`onDelFold()`、`onInline()`、`onPreview()`。
4. 在构造函数中调用`setupToolBar()`。
需要确认这些部分是否是新增的。例如,原来的代码可能没有`setupToolBar()`函数,也没有这些动作指针和对应的槽函数。
现在,用户提供的代码中,`MainWindow`构造函数里新增了`setupToolBar()`的调用。`setupToolBar()`函数是完全新增的,用于创建工具栏、动作,并绑定图标和功能。此外,各个槽函数如`onAddFold()`等也是新增的,用于处理图标的点击事件。
因此,新增部分应该包括:
- `setupToolBar()`函数的定义。
- 所有动作指针(`actAddFold`、`actAddLine`、`actDeleteLine`、`actDelFold`、`actInline`、`actPreview`)的初始化和连接。
- 各个槽函数(`onAddFold()`、`onAddLine()`、`onDeleteLine()`、`onDelFold()`、`onInline()`、`onPreview()`)的实现。
- 构造函数中`setupToolBar()`的调用。
需要注意,用户要求“只列出新增部分”,所以需要从提供的代码中提取这些新增的代码段,排除原有的部分(如`loadDatabase()`、`updateTextEdit()`等原有函数的实现)。
总结,新增部分包括:
1. `setupToolBar()`函数的全部内容。
2. 所有动作相关的变量定义和连接(在`setupToolBar`中)。
3. 所有新增的槽函数(`onAddFold`到`onPreview`)。
4. 构造函数中新增的`setupToolBar()`调用。
</think>
以下是`mainwindow.cpp`中的**新增部分**(相对于无工具栏和图标功能的原始版本):
### 1. 构造函数中新增`setupToolBar()`调用
```cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 原有逻辑(保留)
loadDatabase();
// 新增:初始化工具栏
setupToolBar();
// 原有窗口设置(保留)
setGeometry(100, 100, 800, 600);
setWindowTitle("动态图标工具栏示例");
}
```
### 2. 新增工具栏配置函数`setupToolBar()`
```cpp
// 配置工具栏及动作(核心新增函数)
void MainWindow::setupToolBar()
{
// 1. 创建工具栏并设置样式
mainToolBar = new QToolBar("Main Toolbar", this);
mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 图标下显示文本
mainToolBar->setMovable(false); // 禁止拖动工具栏
addToolBar(Qt::TopToolBarArea, mainToolBar); // 固定在顶部
// 2. 创建动作并绑定图标(资源路径必须与.qrc一致)
actAddFold = new QAction(QIcon(":/new/addfold.svg"), "AddF", this);
actAddFold->setToolTip("添加文件夹 (Add Folder)");
connect(actAddFold, &QAction::triggered, this, &MainWindow::onAddFold);
actAddLine = new QAction(QIcon(":/new/addline.svg"), "AddL", this);
actAddLine->setToolTip("添加行 (Add Line)");
connect(actAddLine, &QAction::triggered, this, &MainWindow::onAddLine);
actDeleteLine = new QAction(QIcon(":/new/deleteline.svg"), "DelL", this);
actDeleteLine->setToolTip("删除行 (Delete Line)");
connect(actDeleteLine, &QAction::triggered, this, &MainWindow::onDeleteLine);
actDelFold = new QAction(QIcon(":/new/delfold.svg"), "DelF", this);
actDelFold->setToolTip("删除文件夹 (Delete Folder)");
connect(actDelFold, &QAction::triggered, this, &MainWindow::onDelFold);
actInline = new QAction(QIcon(":/new/inline.svg"), "Inline", this);
actInline->setToolTip("合并内容 (Inline Content)");
connect(actInline, &QAction::triggered, this, &MainWindow::onInline);
actPreview = new QAction(QIcon(":/new/preview.svg"), "Prev", this);
actPreview->setToolTip("预览 (Preview)");
connect(actPreview, &QAction::triggered, this, &MainWindow::onPreview);
// 3. 将动作添加到工具栏
mainToolBar->addAction(actAddFold);
mainToolBar->addAction(actAddLine);
mainToolBar->addAction(actDeleteLine);
mainToolBar->addAction(actDelFold);
mainToolBar->addAction(actInline);
mainToolBar->addAction(actPreview);
}
```
### 3. 新增图标功能槽函数
```cpp
// 新增:添加文件夹功能槽函数
void MainWindow::onAddFold()
{
QMessageBox::information(this, "AddF", "触发添加文件夹功能");
// 实际逻辑:操作文件系统或数据库添加文件夹记录
}
// 新增:添加行功能槽函数
void MainWindow::onAddLine()
{
if (!sqlModel) return;
int row = sqlModel->rowCount();
sqlModel->insertRow(row); // 表尾插入空行
sqlModel->select(); // 刷新表格数据
updateTextEdit(); // 同步更新textEdit
}
// 新增:删除行功能槽函数
void MainWindow::onDeleteLine()
{
if (!sqlModel) return;
QModelIndex currentIndex = ui->tableView->selectionModel()->currentIndex();
if (currentIndex.isValid()) {
sqlModel->removeRow(currentIndex.row()); // 删除选中行
sqlModel->submitAll(); // 提交修改
sqlModel->select(); // 刷新表格
updateTextEdit(); // 同步更新textEdit
}
}
// 新增:删除文件夹功能槽函数
void MainWindow::onDelFold()
{
QMessageBox::information(this, "DelF", "触发删除文件夹功能");
// 实际逻辑:删除文件系统或数据库中的文件夹记录
}
// 新增:合并内容功能槽函数
void MainWindow::onInline()
{
QMessageBox::information(this, "Inline", "触发内容合并功能");
// 实际逻辑:合并tableView中选中的多行数据(需补充选中行获取逻辑)
}
// 新增:预览功能槽函数
void MainWindow::onPreview()
{
updateTextEdit(); // 刷新textEdit内容(原有逻辑)
QMessageBox::information(this, "Prev", "文本已同步数据库最新数据");
}
```
### 关键说明
以上代码均为**动态创建工具栏及图标功能的新增部分**,包括工具栏初始化、动作创建、图标绑定和功能槽函数实现。原有数据库操作(`loadDatabase`)和文本更新(`updateTextEdit`)未修改,故未列出。
阅读全文