Qt_自定义菜单

简介:

一、右键菜单

右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现!

重写voidcontextMenuEvent(QContextMenuEvent*event)事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void  Form::contextMenuEvent(QContextMenuEvent * event )
{
     //创建菜单、菜单项
     QMenu *pop_menu =  new  QMenu();
     QAction *add_images_action =  new  QAction( this );
     QAction *add_folder_action =  new  QAction( this );
     QAction *remove_selected_action =  new  QAction( this );
     QAction *remove_all_action =  new  QAction( this );
     add_images_action->setText(tr( "add images" ));
     add_folder_action->setText(tr( "add folder" ));
     remove_selected_action->setText(tr( "remove selected images" ));
     remove_all_action->setText(tr( "remove all images" ));
     //清除原有菜单
     pop_menu->addAction(add_images_action);
     pop_menu->addAction(add_folder_action);
     pop_menu->addAction(remove_selected_action);
     pop_menu->addAction(remove_all_action);
     //菜单出现的位置为当前鼠标的位置
     pop_menu->exec(QCursor::pos());
}

二、按钮菜单

使用QPushButton(QToolButton)+QMenu+QAction即可完美实现!

界面拖入一个pushButton按钮;代码实现

1
2
3
4
5
6
7
8
9
QMenu *remove_menu =  new  QMenu();
  QAction *remove_selected_action =  new  QAction(remove_menu);
  QAction *remove_all_action =  new  QAction(remove_menu);
  remove_menu->addAction(remove_selected_action);
  remove_menu->addAction(remove_all_action);
  ui->pushButton->setMenu(remove_menu);
  ui->pushButton->setText(tr( "remove" ));
  remove_selected_action->setText(tr( "remove selected watermarks" ));
  remove_all_action->setText(tr( "remove all watermarks" ));

三、托盘菜单

托盘菜单实现:通过QSystemTrayIcon+QMenu+QAction实现;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
QSystemTrayIcon *system_tray =  new  QSystemTrayIcon();
//放在托盘提示信息、托盘图标
system_tray ->setToolTip(QString( "我就是托盘" ));
system_tray ->setIcon(QIcon( ":/sx1.png" ));
//TrayMenu *tray_menu = new TrayMenu();
QMenu *remove_menu =  new  QMenu();
QAction *remove_selected_action =  new  QAction(remove_menu);
QAction *remove_all_action =  new  QAction(remove_menu);
remove_menu->addAction(remove_selected_action);
remove_menu->addAction(remove_all_action);
remove_selected_action->setText(tr( "remove selected watermarks" ));
remove_all_action->setText(tr( "remove all watermarks" ));
system_tray->setContextMenu(remove_menu);
 
//点击托盘执行的事件
connect(system_tray , SIGNAL(activated(QSystemTrayIcon::ActivationReason)),  this , SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
      connect(remove_menu, SIGNAL(showWidget()),  this , SLOT(showNormal()));
//显示托盘
system_tray->show();
//托盘显示提示信息
system_tray->showMessage(QString( "托盘标题" ), QString( "托盘显示内容" ));

注:关闭和最小化进入到托盘代码

1
2
3
4
5
6
7
8
9
10
11
12
13
void  Form::closeEvent(QCloseEvent *e)
{
     this ->hide();
     e->ignore();
}
void  Form::changeEvent(QEvent *e)
{
     if ((e->type()==QEvent::WindowStateChange)&& this ->isMinimized())
     {
         this ->hide();
         e->ignore();
     }
}

 

本文转自夜&枫博客园博客,原文链接:http://www.cnblogs.com/newstart/p/3365617.html,如需转载请自行联系原作者
相关文章
|
2月前
|
算法 API C++
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
80 0
|
4月前
|
小程序
Qt实现一个卡片橱窗
Qt实现一个卡片橱窗
|
28天前
|
数据可视化 开发工具 C++
Qt Creator 界面
Qt Creator 界面
|
1月前
Qt实现的多菜单选择界面
Qt实现的多菜单选择界面
35 0
|
6月前
|
C++
17 QT - 自定义消息框
17 QT - 自定义消息框
26 0
|
C++ Windows
Qt-QML-Popup,弹层界面编写
随着接触Qt的时间的增加,也逐渐的发现了Qt 的一些不人信话的一些地方,不由的想起一句话,也不知道是在哪里看到的了“一切变成语言都是垃圾,就C++还可以凑合用”大致意思是这样。最近项目的祝界面框架都基本写完了,那自我感觉良好,感觉自己QML的不得了了,全部用的都是自己YY出来的空间,今天小伙伴在同伴代码后,用到了我的模块,给我说了一个BUG,
477 0
Qt-QML-Popup,弹层界面编写
QT Creator应用程序开发——01简单按钮显示
QT Creator应用程序开发——01简单按钮显示
QT Creator应用程序开发——01简单按钮显示
|
C++
Qt界面优化:Qt窗体控件设置
Qt界面优化:Qt窗体控件设置
369 1
Qt界面优化:Qt窗体控件设置
|
Linux 计算机视觉 C++
Qt实用技巧:Qt窗口置顶
Qt实用技巧:Qt窗口置顶