qt 最小化托盘 菜单互斥
2016-05-15 11:21
495 查看
#include "mainwindow.h"
#include "spriteapplication.h"
int main(int argc, char *argv[]) {
SpriteApplication a(argc, argv);
MainWindow w;
w.onInit(&a);
return a.exec();
}
//////////////////////////////////////////////////////@@@@@@@mainwindow.h mainwindow.cpp@@@@@@@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSystemTrayIcon>
#include "traymenu.h"
#include "spriteapplication.h"
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void onInitTray();
private:
TrayMenu *tray_menu;
SpriteApplication* app;
public slots:
void iconIsActived(QSystemTrayIcon::ActivationReason reason);
void onTrayMenuSelected(QString itemId);
public:
void onInit(SpriteApplication* app);
};
#endif // MAINWINDOW_H--------------------------------------
#include "mainwindow.h"
#include "QSystemTrayIcon"
#include "qdebug.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) {
onInitTray();
}
MainWindow::~MainWindow(){
}
void MainWindow::onInit(SpriteApplication* app){
this->app = app;
}
void MainWindow::onInitTray()
{
QSystemTrayIcon *system_tray = new QSystemTrayIcon();
//放在托盘提示信息、托盘图标
system_tray ->setToolTip(tr("传屏精灵"));
system_tray->setIcon(QIcon(":/new/prefix/asset/tray.png"));
tray_menu = new TrayMenu();
system_tray->setContextMenu(tray_menu);
connect(tray_menu,SIGNAL(trayMenuSelected(QString)),this,SLOT(onTrayMenuSelected(QString)));
//点击托盘执行的事件
QObject::connect(system_tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this,SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
//显示托盘
system_tray->show();
//托盘显示提示信息
system_tray->showMessage(QString("传屏精灵"),QString("传屏服务"));
}
void MainWindow::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
//点击托盘显示窗口
case QSystemTrayIcon::Trigger:
tray_menu->exec( QPoint( QCursor::pos().rx(), QCursor::pos().ry() + 2 ));
break;
//双击托盘显示窗口
case QSystemTrayIcon::DoubleClick:
//tray_menu->exec(QCursor::pos());
break;
default:
break;
}
}
void MainWindow::onTrayMenuSelected(QString itemId){
qDebug()<<itemId;
if(itemId == "ID_TRAYMENU_EXIT")
app->quit();
}@@@@@@@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!spriteapplication.h spriteapplication.cpp!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#ifndef SPRITEAPPLICATION_H
#define SPRITEAPPLICATION_H
#include <QObject>
#include <QApplication>
class SpriteApplication : public QApplication {
Q_OBJECT
public:
SpriteApplication(int &argc, char **argv);
};
#endif // SPRITEAPPLICATION_H
-----------------------------
#include "spriteapplication.h"
SpriteApplication::SpriteApplication(int &argc, char **argv)
: QApplication(argc, argv){
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
%%%%%%%%%%%%%%%%% traymenu.h traymenu.cpp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#ifndef TRAYMENU_H
#define TRAYMENU_H
#include "qmenu.h"
class TrayMenu : public QMenu {
Q_OBJECT
public:
TrayMenu();
private:
QAction* m_pActionHigh;
QAction* m_pActionNormal;
QAction* m_pActionLow;
QActionGroup* m_pActionGQGroup;
QAction* m_pActionExit;
private:
void createActions();
private slots:
void onTriggered(QAction* action);
void onExit();
signals:
void trayMenuSelected(QString id);
};
#endif // TRAYMENU_H
#include "traymenu.h"
TrayMenu::TrayMenu()
: QMenu() {
createActions();
}
void TrayMenu::createActions() {
m_pActionHigh = new QAction(this);
m_pActionNormal = new QAction(this);
m_pActionLow = new QAction(this);
m_pActionExit = new QAction(this);
m_pActionHigh->setCheckable( true );
m_pActionNormal->setCheckable( true );
m_pActionLow->setCheckable( true );
m_pActionHigh->setText(QString("高清"));
m_pActionNormal->setText(QString("普通"));
m_pActionLow->setText(QString("高速"));
m_pActionExit->setText(QString("退出"));
connect(m_pActionExit, SIGNAL(triggered()), this, SLOT(onExit()));
//添加菜单项
this->addAction(m_pActionHigh);
this->addAction(m_pActionNormal);
this->addAction(m_pActionLow);
this->addSeparator();
this->addAction(m_pActionExit);
m_pActionGQGroup = new QActionGroup(this);
m_pActionGQGroup->addAction(m_pActionHigh);
m_pActionGQGroup->addAction(m_pActionNormal);
m_pActionGQGroup->addAction(m_pActionLow);
connect(m_pActionGQGroup, SIGNAL(triggered(QAction*)),this,SLOT(onTriggered(QAction*)));
}
void TrayMenu::onTriggered(QAction* action) {
if(action == m_pActionHigh)
emit(trayMenuSelected("ID_TRAYMENU_HIGH"));
else if(action == m_pActionNormal)
emit(trayMenuSelected("ID_TRAYMENU_NORMAL"));
else if(action == m_pActionLow)
emit(trayMenuSelected("ID_TRAYMENU_LOW"));
else if(action == m_pActionExit)
emit(trayMenuSelected("ID_TRAYMENU_EXIT"));
}
void TrayMenu::onExit() {
emit(trayMenuSelected("ID_TRAYMENU_EXIT"));
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.pro
#-------------------------------------------------
#
# Project created by QtCreator 2016-05-04T21:08:29
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ScreenSharingSprite
TEMPLATE = app
SOURCES += main.cpp\
traymenu.cpp \
mainwindow.cpp \
spriteapplication.cpp \
spritecontroller.cpp
HEADERS += \
mainwindow.h \
traymenu.h \
spriteapplication.h \
spritecontroller.h
RESOURCES += \
asset.qrc
相关文章推荐
- Qt5给Excel添加批注
- Qt在Windows下的三种编程环境搭建
- Qt在pro中管理多个子项目(子工程)
- mqtt 学习
- QT5问题汇总
- Qt学习笔记:QMainWindow与QDockWidget
- Qt: can't find -lGL(Ubuntu16.04)
- Qt学习笔记:QMenuBar()、QMenu()和QAction()的使用
- QtChart-Qt官方绘图库安装与使用
- ubuntu 安装 qt
- QT运行发布的exe时无法读取并显示图片的解决办法
- Qt学习之路(58): 进程间交互
- QT-怎么添加程序图标
- QT实现五子棋(附源码)
- QT-如何添加资源文件
- QT实战:LOL模拟加点器
- QT——快捷键
- QT-悬浮对话框
- 第17章 KDE的Qt
- Qt 下 Singleton单例模式小记