Qt右键多级菜单栏构建

您所在的位置:网站首页 qmenu二级菜单 Qt右键多级菜单栏构建

Qt右键多级菜单栏构建

#Qt右键多级菜单栏构建| 来源: 网络整理| 查看: 265

如何添加右键菜单栏?

  目前Qt并不支持使用UI设计器进行直接的拖拽式图形化创建右键菜单栏,也就是说,只能使用代码进行编程。   那么首先需要声明需要的组件,直观想法是将该组件和用拖拽设计的UI组件声明在一个文件中,也就是ui_mainwindow.h头文件,该文件位于build-filename文件夹下,可以打开进行编辑,但不建议对该文件直接进行代码修改;由于该文件是由Qt自行生成的,对该文件修改后,构建过程会提示“文件已修改”,然后出现选择窗口,如下图:   本人对该图中所有选项都进行了尝试,发现没有一个能彻底解决构建问题,因此希望对自动生成的ui_mainwindow.h能不改就不改。因此,应该在mainwindow.h头文件中声明变量,如下图:   因此对于其他控件而言,但UI设计器不能进行拖拽,需要代码实现时,不要修改ui_mainwindow.h文件,而是在mainwindow.h中对所需的控件进行声明,然后利用自定义函数对界面进行创建。   由于右键菜单栏是由函数void contextMenuEvent(QContextMenuEvent *event)重载实现的,因此在mainwindows.h中声明该函数,同时声明对所定义控件初始化的函数,如下图:   下面,对声明的两个函数进行编辑。首先需要对我们添加的控件进行功能的初始化,这是我们定义一个函数,它将专门完成控件的配置,即initalAction()。而菜单栏就是在一个QMenu上不断假如QAction,而每个QAction都对应一个操作;而想要使菜单实现多级化,只需要再申请一个QMenu控件,并将它置于主右键菜单上即可,具体代码如下:

void MainWindow::initalAction() {//初始化右键菜单栏 context = new QMenu; //添加右键菜单 addLine = new QMenu; //添加多级菜单,即点击后还会有下一级菜单显示 addLine_up = new QAction; //添加将完成响应的控件 addLine_down = new QAction; addLine = context->addMenu("添加行"); //将下一级菜单添加在主右键菜单上,并显示“添加行”的字样 addLine_up = addLine->addAction("在上方"); //给“添加行”这个次级菜单添加控件分别具有不同功能 addLine_down = addLine->addAction("在下方"); //设置信号与槽 connect(addLine_up, SIGNAL(triggered()), this, SLOT(on_addLine_up_triggered())); //当点击“在上方”是完成在该行上方添加行的功能 } void MainWindow::on_addLine_up_triggered() {//当点击在上方插入行时,完成下述功能 //此处为功能 return; } void MainWindow::contextMenuEvent(QContextMenuEvent *event) {//点击右键时出现的响应菜单 //在鼠标位置显示 context->exec(QCursor::pos()); event = nullptr; return; }

  由于控件初始化已经交由专门的initAction()函数完成,因此我们只需要让点击右键时在鼠标位置进行显示即可。该函数是Qt封装了一部分的,因此自动带有参数event,具体看文档功能为事件响应,贴一部分文档如下图: 完成后的效果为: 注意:如果不讲event使用掉就会有警告。观察event为指着,那么将其设置为空,即

event = nullptr;

  观察到,会出现“只将其设置了,但没有使用”的警告,查看文档,发现QMouseEvent是QEvent的子类,QEvent中有一个函数为accept(),其返回值为void,可以将其使用掉;accept的作用如下图: 在这里插入图片描述 不直接使用QMouseEvent的函数是因为没有返回值为void的函数。   也可以使用Q_UNUSED(event);将event用掉。 另外:若出现“member access into incomplete type QMouseEvent”的错误提示,意味着没有将头文件包含进去,添加后即可。

参考资料

[1]. QTableWidget详解(样式、右键菜单、表头塌陷、多选等) [2]. (四)Qt之右键菜单



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3