Qt TableView右鍵彈出菜單


TableView右鍵彈出菜單

關於TableView的控件使用,這里不做解釋了,直接說訴求,右鍵點擊選中的某一行(術語稱item),彈出菜單。操作結果如下圖:
在這里插入圖片描述
實現過程主要包括以下幾個重點:

1、初始化一個TableView控件表

主要需要完成表頭的設置,表格屬性的設置。
代碼如下:

point_time_model 表示TableView控件對應的model:

point_time_model = new QStandardItemModel(ui->Point_Time_tableView);

初始化:

 1 const int table_cols = 3; //有幾列
 2 QStringList headerList;  3 headerList <<  "位置"  <<  "監測時長"  <<  "     " ;  4 point_time_model->setHorizontalHeaderLabels(headerList);  5 point_time_model->setColumnCount(table_cols);  6 //設置列表屬性
 7 ui->Point_Time_tableView->verticalHeader()->setVisible(false);   //隱藏列表頭
 8 ui->Point_Time_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //選擇整行
 9 ui->Point_Time_tableView->setSelectionMode(QAbstractItemView::SingleSelection); //只選擇一行
10 ui->Point_Time_tableView->horizontalHeader()->setStretchLastSection(true); //最后一列填滿表
11 ui->Point_Time_tableView->setContextMenuPolicy(Qt::CustomContextMenu); //可彈出右鍵菜單

其中,ui->Point_Time_tableView->setContextMenuPolicy(Qt::CustomContextMenu); !!!這里是重點!!!

2 、為TableView控件表添加右鍵菜單

首先需要創建一個菜單,並為菜單添加行為,代碼如下:
.cpp文件中

1 QMenu *popMenu; //菜單
2 popMenu = new QMenu(ui->Point_Time_tableView); 3 QAction *actionUpdateInfo = new QAction(); 4 QAction *actionDelInfo = new QAction(); 5 actionUpdateInfo ->setText(QString("修改")); 6 actionDelInfo ->setText(QString("刪除")); 7 popMenu->addAction(actionUpdateInfo); 8 popMenu->addAction(actionDelInfo);

到這里,右鍵菜單已經建立好了,接下來的關鍵步驟是,如何右鍵點擊一行,彈出該菜單,需要用到槽和信號機制。

3 、右鍵彈出菜單的槽和信號機制

.h文件中

1 private slots: 2      //右鍵菜單響應函數
3      void slotContextMenu(QPoint pos);

.cpp文件中,在第2步的代碼之后初始化槽信號的connect函數:

connect(ui->Point_Time_tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));

(1)該連接函數中的SIGNAL(customContextMenuRequested(QPoint))是QMenu的自帶響應信號。
(2)SLOT(slotContextMenu(QPoint)))中的槽函數需要自己實現,代碼如下:

1 void MainWindow::slotContextMenu(QPoint pos) 2 { 3    auto index = ui->Point_Time_tableView->indexAt(pos); 4     if (index.isValid()) 5  { 6         popMenu->exec(QCursor::pos()); // 菜單出現的位置為當前鼠標的位置
7  } 8 }

以上,右鍵點擊某一行時,菜單就會出現,相應的每一個菜單需要什么樣的響應操作,就是后續的槽和信號之間的操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM