diff --git a/MainWindow.cpp b/MainWindow.cpp index 46c081b..827ed4c 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -20,6 +20,8 @@ // 设置表头 ui->pagedTable->setColumns(buildColumns()); ui->pagedTable->setMultiCheckType(QPagedTable::MultiCheckType::RADIO); + + createContextMenu(); } MainWindow::~MainWindow() @@ -114,6 +116,29 @@ return columnList; } +void MainWindow::createContextMenu() +{ + QStringList menuList; + menuList << "详情" << "编辑" << "删除"; + ui->pagedTable->setContextMenuLabels(menuList); + + connect(ui->pagedTable, &QPagedTable::contextMenuActionTrigged, [=](int index, int rowIdx, int colIdx){ + switch (index) { + case 0: + rowDetailActionHandler(rowIdx, colIdx); + break; + + case 1: + rowEditActionHandler(rowIdx, colIdx); + break; + + case 2: + rowDeleteActionHandler(rowIdx, colIdx); + break; + } + }); +} + void MainWindow::getStandardDeviceList(int currPage) { EquipmentDao eqptDao; @@ -147,3 +172,16 @@ { getStandardDeviceList(0); } + +void MainWindow::rowDetailActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row detail" << rowIdx << colIdx; +} +void MainWindow::rowEditActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row edit" << rowIdx << colIdx; +} +void MainWindow::rowDeleteActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row delete" << rowIdx << colIdx; +} diff --git a/MainWindow.cpp b/MainWindow.cpp index 46c081b..827ed4c 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -20,6 +20,8 @@ // 设置表头 ui->pagedTable->setColumns(buildColumns()); ui->pagedTable->setMultiCheckType(QPagedTable::MultiCheckType::RADIO); + + createContextMenu(); } MainWindow::~MainWindow() @@ -114,6 +116,29 @@ return columnList; } +void MainWindow::createContextMenu() +{ + QStringList menuList; + menuList << "详情" << "编辑" << "删除"; + ui->pagedTable->setContextMenuLabels(menuList); + + connect(ui->pagedTable, &QPagedTable::contextMenuActionTrigged, [=](int index, int rowIdx, int colIdx){ + switch (index) { + case 0: + rowDetailActionHandler(rowIdx, colIdx); + break; + + case 1: + rowEditActionHandler(rowIdx, colIdx); + break; + + case 2: + rowDeleteActionHandler(rowIdx, colIdx); + break; + } + }); +} + void MainWindow::getStandardDeviceList(int currPage) { EquipmentDao eqptDao; @@ -147,3 +172,16 @@ { getStandardDeviceList(0); } + +void MainWindow::rowDetailActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row detail" << rowIdx << colIdx; +} +void MainWindow::rowEditActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row edit" << rowIdx << colIdx; +} +void MainWindow::rowDeleteActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row delete" << rowIdx << colIdx; +} diff --git a/MainWindow.h b/MainWindow.h index 6b08c38..454d2d5 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -28,12 +28,17 @@ PageUtil page; QList buildColumns(); + void createContextMenu(); private slots: void on_pushButton_clicked(); void getStandardDeviceList(int currPage); + void rowDetailActionHandler(int rowIdx, int colIdx); + void rowEditActionHandler(int rowIdx, int colIdx); + void rowDeleteActionHandler(int rowIdx, int colIdx); + signals: void tableDataChanged(); }; diff --git a/MainWindow.cpp b/MainWindow.cpp index 46c081b..827ed4c 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -20,6 +20,8 @@ // 设置表头 ui->pagedTable->setColumns(buildColumns()); ui->pagedTable->setMultiCheckType(QPagedTable::MultiCheckType::RADIO); + + createContextMenu(); } MainWindow::~MainWindow() @@ -114,6 +116,29 @@ return columnList; } +void MainWindow::createContextMenu() +{ + QStringList menuList; + menuList << "详情" << "编辑" << "删除"; + ui->pagedTable->setContextMenuLabels(menuList); + + connect(ui->pagedTable, &QPagedTable::contextMenuActionTrigged, [=](int index, int rowIdx, int colIdx){ + switch (index) { + case 0: + rowDetailActionHandler(rowIdx, colIdx); + break; + + case 1: + rowEditActionHandler(rowIdx, colIdx); + break; + + case 2: + rowDeleteActionHandler(rowIdx, colIdx); + break; + } + }); +} + void MainWindow::getStandardDeviceList(int currPage) { EquipmentDao eqptDao; @@ -147,3 +172,16 @@ { getStandardDeviceList(0); } + +void MainWindow::rowDetailActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row detail" << rowIdx << colIdx; +} +void MainWindow::rowEditActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row edit" << rowIdx << colIdx; +} +void MainWindow::rowDeleteActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row delete" << rowIdx << colIdx; +} diff --git a/MainWindow.h b/MainWindow.h index 6b08c38..454d2d5 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -28,12 +28,17 @@ PageUtil page; QList buildColumns(); + void createContextMenu(); private slots: void on_pushButton_clicked(); void getStandardDeviceList(int currPage); + void rowDetailActionHandler(int rowIdx, int colIdx); + void rowEditActionHandler(int rowIdx, int colIdx); + void rowDeleteActionHandler(int rowIdx, int colIdx); + signals: void tableDataChanged(); }; diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index e6e1027..5b7c7f5 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -33,6 +33,12 @@ // 设置行的高度为固定值 ui->table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::Fixed); + + ui->table->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); + menu = new QMenu(ui->table); + + // 临时 + menu->setStyleSheet("QMenu{font-size: 16px;}"); } void QPagedTable::initTableHeader() @@ -102,6 +108,35 @@ updateTableList(); } +void QPagedTable::setContextMenuLabels(QStringList menuLabels) +{ + contextMenuLabels = menuLabels; + + connect(ui->table, &QTableWidget::customContextMenuRequested, [=](const QPoint &pos){ + int rowIdx = ui->table->rowAt(pos.y()); + int colIdx = ui->table->columnAt(pos.x()); + if (rowIdx >= 0 && colIdx >= 0) { + int actionIdx = 0; + for (QAction * action : menu->actions()) { + menu->removeAction(action); + } + + for (QString label : contextMenuLabels) { + QAction * action = new QAction(label, menu); + + connect(action, &QAction::triggered, [=](){ + emit contextMenuActionTrigged(actionIdx, rowIdx, colIdx); + }); + menu->addAction(action); + + actionIdx++; + } + + menu->exec(ui->table->mapToGlobal(pos)); + } + }); +} + void QPagedTable::setPage(int pageSize, int currentPage, int totalCount, int totalPage) { page.tableRowCount = pageSize; @@ -124,6 +159,11 @@ multiCheck = type; } +QTableWidget * QPagedTable::getTableInstance() +{ + return ui->table; +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(); diff --git a/MainWindow.cpp b/MainWindow.cpp index 46c081b..827ed4c 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -20,6 +20,8 @@ // 设置表头 ui->pagedTable->setColumns(buildColumns()); ui->pagedTable->setMultiCheckType(QPagedTable::MultiCheckType::RADIO); + + createContextMenu(); } MainWindow::~MainWindow() @@ -114,6 +116,29 @@ return columnList; } +void MainWindow::createContextMenu() +{ + QStringList menuList; + menuList << "详情" << "编辑" << "删除"; + ui->pagedTable->setContextMenuLabels(menuList); + + connect(ui->pagedTable, &QPagedTable::contextMenuActionTrigged, [=](int index, int rowIdx, int colIdx){ + switch (index) { + case 0: + rowDetailActionHandler(rowIdx, colIdx); + break; + + case 1: + rowEditActionHandler(rowIdx, colIdx); + break; + + case 2: + rowDeleteActionHandler(rowIdx, colIdx); + break; + } + }); +} + void MainWindow::getStandardDeviceList(int currPage) { EquipmentDao eqptDao; @@ -147,3 +172,16 @@ { getStandardDeviceList(0); } + +void MainWindow::rowDetailActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row detail" << rowIdx << colIdx; +} +void MainWindow::rowEditActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row edit" << rowIdx << colIdx; +} +void MainWindow::rowDeleteActionHandler(int rowIdx, int colIdx) +{ + qDebug() << "row delete" << rowIdx << colIdx; +} diff --git a/MainWindow.h b/MainWindow.h index 6b08c38..454d2d5 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -28,12 +28,17 @@ PageUtil page; QList buildColumns(); + void createContextMenu(); private slots: void on_pushButton_clicked(); void getStandardDeviceList(int currPage); + void rowDetailActionHandler(int rowIdx, int colIdx); + void rowEditActionHandler(int rowIdx, int colIdx); + void rowDeleteActionHandler(int rowIdx, int colIdx); + signals: void tableDataChanged(); }; diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index e6e1027..5b7c7f5 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -33,6 +33,12 @@ // 设置行的高度为固定值 ui->table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::Fixed); + + ui->table->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); + menu = new QMenu(ui->table); + + // 临时 + menu->setStyleSheet("QMenu{font-size: 16px;}"); } void QPagedTable::initTableHeader() @@ -102,6 +108,35 @@ updateTableList(); } +void QPagedTable::setContextMenuLabels(QStringList menuLabels) +{ + contextMenuLabels = menuLabels; + + connect(ui->table, &QTableWidget::customContextMenuRequested, [=](const QPoint &pos){ + int rowIdx = ui->table->rowAt(pos.y()); + int colIdx = ui->table->columnAt(pos.x()); + if (rowIdx >= 0 && colIdx >= 0) { + int actionIdx = 0; + for (QAction * action : menu->actions()) { + menu->removeAction(action); + } + + for (QString label : contextMenuLabels) { + QAction * action = new QAction(label, menu); + + connect(action, &QAction::triggered, [=](){ + emit contextMenuActionTrigged(actionIdx, rowIdx, colIdx); + }); + menu->addAction(action); + + actionIdx++; + } + + menu->exec(ui->table->mapToGlobal(pos)); + } + }); +} + void QPagedTable::setPage(int pageSize, int currentPage, int totalCount, int totalPage) { page.tableRowCount = pageSize; @@ -124,6 +159,11 @@ multiCheck = type; } +QTableWidget * QPagedTable::getTableInstance() +{ + return ui->table; +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(); diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index a253644..d423c13 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -6,7 +6,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -40,6 +42,7 @@ void adjustTableWidth(); void setColumns(QList columnList); void setDatas(QList> pagedDataList); + void setContextMenuLabels(QStringList menuLabels); void setPage(int pageSize, int currentPage, int totalCount, int totalPage); void setPageSize(int pageSize); void setTotalCount(int totalCount); @@ -62,6 +65,10 @@ QList columns; QList> datas; + QStringList contextMenuLabels; + QMenu * menu; + QList actionItemList; + QStringList headerLabels; int fixedWidth = 0; @@ -92,9 +99,9 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); - signals: void reloadTablePagedData(int currPage); + void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); }; #endif // QPAGEDTABLE_H