qt关于一些托盘,任务栏图标隐藏,无边框等的一些窗口的效果
来源:互联网 发布:网络客服人员工作职责 编辑:程序博客网 时间:2024/05/05 17:02
现在用到的挺多的软件基本都需要实现到这些个的功能。
1.对于无边框透明的窗口,其实两个设置两句话就搞定了
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);
然后就是这样之后无法响应鼠标的拖动,所以你要重载时间处理函数来实现鼠标的按下然后拖动的时间,其实就是根据鼠标的移动事件,判断如果按键是按下的状态,那么久move整个控件这样子。当然你觉得如果好多个窗口都要实现这个功能或者说你觉的写在程序的窗口类里面去重载这些个函数不太好。那么你可以自己建一个QOBJECT,然后利用这个object来处理窗口的事件。例如你的win窗口,需要实现这个功能,那么你就调用
win->installEventFilter(this);this指的是你自己新建的用来处理拖动的时间的qobject类,然后多个win你都可以注册到这个obj上,之后你注册过的窗口的事件都会经过这个obj,你就可以在这里:eventFilter(QObject* obj, QEvent* event) 拿到鼠标的移动的信息,还可以判断拿到的对象,然后去实现想要的功能。其实用到的就是installEventFilter这个函数的事件注册的效果而已,然后有一点比较重要的就是:installEventFilter注册过的窗口,事件触发时候的优先级是越后注册的优先级越高,所以在后来注册的类里如果你在eventFilter里做完处理return了一个true,那消息就不会继续走,后面(先前注册的类)就拿不到这个消息。这个是要注意一下的,根据需求也能调整一下注册的顺序。对应的卸载就是removeEventFilter函数。
2.然后说一下托盘的事情
托盘其实利用的是QSystemTrayIcon这个类来实现。
system_tray = new QSystemTrayIcon(this); system_tray->setToolTip("标题"); system_tray->setIcon(QIcon(":/image/image/mhbox.ico")); TrayMenu *tray_menu = new TrayMenu(this); system_tray->setContextMenu(tray_menu); connect(ui->pushButton_close,&QPushButton::clicked,this,[=](){this->hide();}); connect(tray_menu,&TrayMenu::appShow,this,[=](){this->showNormal();}); connect(tray_menu,&TrayMenu::appInfo,this,[=](){}); connect(tray_menu,&TrayMenu::appQuit,this,[=](){qApp->exit();}); connect(system_tray,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason reason){ if(reason == QSystemTrayIcon::DoubleClick) { this->showNormal(); } }); system_tray->show();
这个应该比较简单了,然后里面的对应的TrayMenu就需要重载一下QMenu实现一下对应的QAction和signal就好了:
class TrayMenu : public QMenu{ Q_OBJECTpublic: QAction* action_quit; QAction* action_about; QAction* action_restore; explicit TrayMenu(QWidget *parent = 0); void createAction();signals: void appQuit(); void appShow(); void appInfo();public slots:};TrayMenu::TrayMenu(QWidget *parent) : QMenu(parent){ createAction();}void TrayMenu::createAction(){ action_quit = new QAction(this); action_quit->setIcon(QIcon(":/image/image/close.png")); action_quit->setText("退出"); action_about = new QAction(this); action_about->setIcon(QIcon(":/image/image/info.png")); action_about->setText("关于"); action_restore = new QAction(this); action_restore->setIcon(QIcon(":/image/image/home.png")); action_restore->setText("还原程序"); this->addAction(action_restore); this->addAction(action_about); this->addSeparator(); this->addAction(action_quit); //信号 connect(action_restore,&QAction::triggered,this,&TrayMenu::appShow); connect(action_about,&QAction::triggered,this,&TrayMenu::appInfo); connect(action_quit,&QAction::triggered,this,&TrayMenu::appQuit);}这样就是实现的大概,具体的都是进一步来修改。
3.然后最后就是这个任务栏图标的问题。
任务栏就是我们window下边的现实打开的程序的那个地方。可能你需要说不想要你的程序显示在那里,比如像qq这样子的窗口,那么其实你可以这样设置:
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint|Qt::Tool);
其实也就比之前多了一个这个Qt::WindowStaysOnTopHint|Qt::Tool,前一个是指定窗口的置顶,后一个就是实现隐藏的任务栏图标,但是如果是最小化的话,会出现一个悬浮的小窗口,解决就是如果有托盘,那么点击最小化的时候你截取事件然后触发hide而不是最小化就好了。
- qt关于一些托盘,任务栏图标隐藏,无边框等的一些窗口的效果
- Qt窗口的一些简单设置-标题、图标、最大化最小化按钮、任务栏图标
- Qt窗口的一些简单设置-标题、图标、最大化最小化按钮、任务栏图标
- 如何隐藏QT窗口在任务栏(taskbar)的任务图标
- 如何隐藏QT窗口在任务栏(taskbar)的任务图标
- qt 隐藏任务栏图标和边框
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 隐藏窗口和任务栏图标的实现
- Qt任务栏,托盘栏,托盘菜单,图标等操作
- MFC 无边框对话框实现点击任务栏图标 还原窗口的功能
- 关于对话框最小化到托盘后,点击托盘图标后只在任务栏显示而无法还原窗口的解决方法。
- Qt实现任务栏中的托盘图标的功能.
- 隐藏任务栏的开始菜单、托盘
- 隐藏QT窗口在任务栏中的图标
- Qt无边框和目录的一些处理
- Qt 界面:窗口图标以及任务栏图标的设置
- c#无边框点任务栏图标显示和隐藏
- 关于s:iterator中"value" does not support runtime expressions的解决方法
- C语言_文件
- 拦截webview上的请求,进行一系列操作
- 小爬虫之博客刷博器
- 再搬家。。。
- qt关于一些托盘,任务栏图标隐藏,无边框等的一些窗口的效果
- 图像分割
- iOS error APPLE LLVM 5.1 Error UIKit.pcm was built
- Appium和Robotium在文字输入上的区别
- php中几个简单的例子
- 一些电子相关的网站
- XSS Funny Vector Review
- App.Config详解及读写操作
- 常见正则表达式