首页| 论坛| 消息

标题:重写QSplashScreen加载界面,加载界面外如何不影响其他软件的使用呢?
作者:lwei24
日期:2022-08-26 14:26
内容:

如题,在重写QSplashScreen后,并做了一个加载界面(加载界面是一个小于桌面的矩形),现在,安装钩子后,点击加载界面以外的区域,加载界面不会消失,鼠标也能在加载界面区域外的范围内移动,如今,想实现加载界面区域以外,用户可以不受影响的自由使用其他应用程序,比如拖拽、移动等,而加载界面也不受影响。具体代码如下:
////MyLoader.h
class MyLoader : public QSplashScreen
{
public:
MyLoader(const QString fileName);
~MyLoader();
public:
void InitUI();
void SetRange(int min, int max);
protected:
virtual void enterEvent(QEvent *);
virtual void leaveEvent(QEvent *);
virtual void drawContents(QPainter *painter);
bool eventFilter(QObject *watched, QEvent *event);
private:
static void InstallMouseHook();
static void UnInstallMouseHook();
private:
int m_framecount;
QString m_fileName;
};

////MyLoader.cpp
static HHOOK mouseHook = nullptr;
static boolisEnterArea = false;
MyLoader::MyLoader(const QString fileName)
: m_fileName(fileName)
{
InstallMouseHook();
this->InitUI();
this->setMouseTracking(true);
}
MyLoader::~MyLoader()
{
UnInstallMouseHook();
}

void MyLoader::InitUI()
{
this->installEventFilter(this);
QPixmap pix(m_fileName);
this->setPixmap(pix);
}
void MyLoader::drawContents(QPainter *painter)
{
QFont font;
FontHelper::Instance()->SetFont(font ..


#1 [liudianwu 08-26 16:40]
把钩子去掉试试
#2 回 liudianwu 的帖子 [lwei24 08-26 17:11]
liudianwu:把钩子去掉试试 (2022-08-26 16:40) 
大佬,试过了,把钩子去掉的话,点击加载窗口外的区域,加载窗口就会突然消失。所以,我才装上了钩子。不过,安装钩子虽然屏蔽调了加载窗口外的区域,点击等操作导致加载窗口已不会消失。但是,加载窗口外的区域,假如还想对其他应用程序操作,比如想对文本操作,这时候,就不得不等待加载窗口加载外后,把钩子卸载了,才能操作。因此,想让加载窗口一直显示在桌面(直到它加载完后显示主窗口这段时间内),不受加载窗口外的区域所有的操作,比如鼠标、键盘的事件影响,不知道您这边有什么好办法能实现吗?
#3 [fsu0413 08-26 22:19]
你想太多了, Qt::WindowStaysOnTopHint 一个flag解决,看文档
https://doc.qt.io/qt-5/qsplashscreen.html
#4 回 fsu0413 的帖子 [lwei24 08-29 08:21]
fsu0413:你想太多了, Qt::WindowStaysOnTopHint 一个flag解决,看文档
https://doc.qt.io/qt-5/qsplashscreen.html (2022-08-26 22:19) 
多谢指点,的确,设置Qt::WindowStaysOnTopHint后就可以解决问题了!

回复 发表
主题 版块