实现弹出菜单通过搜索好像有很多办法,但按简单至上的原则,我想要简单实现并容易理解并下次能记住的办法。
首先了解一下部件的原生弹出菜单,这里部件以Text Edit为例。
在部件属性栏(我至此还不知道那个栏叫什么名字)有一“contextMenuPolicy”,中文叫上下文菜单或弹出菜单。
【喷,英文与中文,中西观念不同,把我搞到头晕。context直译是上下文的意思,但从形式动作来看,这种按鼠标右键出来的菜单好像是弹出来的。叫上下文是逻辑关系,叫弹出是东方的形象思维。】
这个contextMenuPolicy可设置的,如图。
默认状态下是这样子的。
从逻辑上来看,我自己造个菜单来代替这个默认的就行了?
要有弹出菜单,就先制造菜单,其实还不用菜单,简单地制造Action就行了【喷,又是术语,Action可理解是菜单中的按钮吧,但那又不是按钮,凌乱中…】
te_main_action = new QAction(QIcon("icon/save_floppy_48px_1187937_easyicon.net.ico"),"保存",this);
connect(te_main_action,SIGNAL(triggered()),this,SLOT(context_menu_test()));
ui->te_main->addAction(te_main_action);
上面的te_main是Text Edit控件。
还要定义槽函数
void MainWindow::context_menu_test()
{
ui->statusBar->showMessage("弹出菜单测试");
}
不要忘记声明。于是默认的弹出菜单就被我Diy的菜单所代替。
简单的总结就是。
- 把部件的contextMenuPolicy设置成ActionsContexMenu。
- Diy自己的菜单或Action。
- 把Action装进部件中。
- 连接槽函数。