网站首页 > 博客文章 正文
TableView右键弹出菜单
关于TableView的控件使用,这里不做解释了,直接说诉求,右键点击选中的某一行(术语称item),弹出菜单。操作结果如下图:
实现过程主要包括以下几个重点:
1、初始化一个TableView控件表
主要需要完成表头的设置,表格属性的设置。
代码如下:
point_time_model 表示TableView控件对应的model:
point_time_model = new QStandardItemModel(ui->Point_Time_tableView);
初始化:
const int table_cols = 3; //有几列
QStringList headerList;
headerList << "位置" << "监测时长" << " " ;
point_time_model->setHorizontalHeaderLabels(headerList);
point_time_model->setColumnCount(table_cols);
//设置列表属性
ui->Point_Time_tableView->verticalHeader()->setVisible(false); //隐藏列表头
ui->Point_Time_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //选择整行
ui->Point_Time_tableView->setSelectionMode(QAbstractItemView::SingleSelection); //只选择一行
ui->Point_Time_tableView->horizontalHeader()->setStretchLastSection(true); //最后一列填满表
ui->Point_Time_tableView->setContextMenuPolicy(Qt::CustomContextMenu); //可弹出右键菜单
其中,ui->Point_Time_tableView->setContextMenuPolicy(Qt::CustomContextMenu); !!!这里是重点!!!
【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】
点击→领取「链接」
2 、为TableView控件表添加右键菜单
首先需要创建一个菜单,并为菜单添加行为,代码如下:
.cpp文件中
QMenu *popMenu; //菜单
popMenu = new QMenu(ui->Point_Time_tableView);
QAction *actionUpdateInfo = new QAction();
QAction *actionDelInfo = new QAction();
actionUpdateInfo ->setText(QString("修改"));
actionDelInfo ->setText(QString("删除"));
popMenu->addAction(actionUpdateInfo);
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)))中的槽函数需要自己实现,代码如下:
void MainWindow::slotContextMenu(QPoint pos)
{
auto index = ui->Point_Time_tableView->indexAt(pos);
if (index.isValid())
{
popMenu->exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
}
}
以上,右键点击某一行时,菜单就会出现,相应的每一个菜单需要什么样的响应操作,就是后续的槽和信号之间的操作。
猜你喜欢
- 2025-06-08 比GoPro 13更强的大疆Action 5 Pro,到底强在哪里?
- 2025-06-08 信号和槽(信号和槽的实现原理)
- 2025-06-08 在响应式项目中连接设计与开发(请简述实现响应式设计包括哪些技术点)
- 2025-06-08 【C#】委托、Action、Func 和 Event 之间的关系
- 2025-06-08 如何使用JavaScript实现Prompt弹窗?
- 2025-06-08 谷歌Magic Actions功能曝光:AI革新安卓16通知交互
- 2025-06-08 基于目标TPS的性能测试,如何通过手动设置场景进行测试?
- 2025-06-08 IOS基础学习之输出口和动作(io口输入输出实验总结及体会)
- 2025-06-08 《Java语言程序设计》期末考试模拟试题——判断题和问答题
- 2025-06-08 Android学习之Touch事件的处理(android触摸事件实例)
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)