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这个类来实现。
QApplication a(argc, argv)#ifdef Q_OS_UNIX
// 隐藏鼠标
a.setOverrideCursor(Qt::BlankCursor)
#endif
需要添加头文件
#include <QCursor>欢迎分享,转载请注明来源:内存溢出
评论列表(0条)