QTableWidget で右クリックメニューを出す方法です。
まずQTableWidget でコンテキストメニューを有効化する必要があります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); | |
connect(ui->tableWidget, &QTableWidget::customContextMenuRequested, this, | |
&MainWindow::deleteState); |
呼び出したメソッドでメニューを作り、popup() メソッドで表示します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void MainWindow::deleteState(const QPoint &pos) { | |
QMenu *menu = new QMenu(this); | |
QAction *ciz = new QAction("&Delete State"); | |
connect(ciz, &QAction::triggered, this, &MainWindow::deleteStateItem); | |
menu->addAction(ciz); | |
menu->popup(ui->tableWidget->viewport()->mapToGlobal(pos)); | |
int row = ui->tableWidget->itemAt(pos)->row(); | |
m_currentState = ui->tableWidget->item(row, 0)->text().toInt(); | |
} |
セルの位置はマウスクリックの位置から itemAt() で計算します。
位置情報はクラス変数で保存すると使いやすいかもしれません。
あと、QTableWidgetItem が設定されていないセルではメニューを表示しない設定もできます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void MainWindow::deleteNumber(const QPoint &pos) | |
{ | |
QTableWidgetItem* item=ui->tabWidget->itemAt(pos); | |
if(item!=nullptr){ | |
QMenu *menu = new QMenu(this); | |
QAction *action = new QAction("&Delete Number"); | |
connect(action, &QAction::triggered, this, &MainWindow::deleteItem); | |
menu->addAction(action); | |
menu->popup(ui->tabWidget->viewport()->mapToGlobal(pos)); | |
int row = item->row(); | |
m_current = ui->tabWidget->item(row, 0)->text().toInt(); | |
} | |
} |