最近,在一个Qt程序中使用QMenu类时,遇到了一个小问题,特记录下。
首先,我模仿一下问题出现的场景:
假设我在做一个高大上的XX管理系统,比如说:学生信息管理系统。在这个系统中,学生的各项信息(比如:姓名、性别、年龄、班级、总分)使用数据库来存储。为了便于老师操作学生数据记录(比如:添加、修改、删除),我使用了一个QTableWidget(嗯,如果在MFC中的话,我会使用CListCtrl/CMFCListCtrl)来显示数据库中的所有学生记录。这个QTableWidget有多列,每列对应数据库中的一项(列)信息。
现在,我想给这个QTableWidget的header view上添加一个右键快捷菜单,也就是所谓的:Context menu。通过这个Context Menu,我们可以选择让QTableWidget中哪些列显示出来,哪些列不显示。
首先,我模仿一下问题出现的场景:
假设我在做一个高大上的XX管理系统,比如说:学生信息管理系统。在这个系统中,学生的各项信息(比如:姓名、性别、年龄、班级、总分)使用数据库来存储。为了便于老师操作学生数据记录(比如:添加、修改、删除),我使用了一个QTableWidget(嗯,如果在MFC中的话,我会使用CListCtrl/CMFCListCtrl)来显示数据库中的所有学生记录。这个QTableWidget有多列,每列对应数据库中的一项(列)信息。
现在,我想给这个QTableWidget的header view上添加一个右键快捷菜单,也就是所谓的:Context menu。通过这个Context Menu,我们可以选择让QTableWidget中哪些列显示出来,哪些列不显示。
类似上面的这种需求很普遍。比如,Win 7系统的资源管理器就提供了这种功能,一图以蔽之:
怎样在Qt中为一个窗体部件上实现context menu?我找到了一些资料:
How to add a list of QActions to QMenu and handle them with a single slot?
Right-click context menus with Qt
百度文库:QListWidget的item上实现右键菜单
我的测试代码:
主函数:
// main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;