您的位置:首页 > 编程语言 > Qt开发

qt 最小化托盘 菜单互斥

2016-05-15 11:21 495 查看
///////////main.cpp////////////////
#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

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: