在Qt开发的应该程序中,双击左上角的程序图标时程序自动退出了,这有时不符合软件的需求。
本篇记录双击软件左上角图标防止程序退出。
重写bool nativeEvent(const QByteArray &eventType, void *message, long *result)函数,过滤双击事件。
具体代码如下:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
protected:
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
dialog.cpp文件
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include "Windows.h"
#include "windowsx.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
bool Dialog::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG *msg = (MSG *)message;
if(msg->message == WM_SYSCOMMAND)
{
if(0xF093 == msg->wParam )//禁用单击61587
{
qDebug() << "Dialog::nativeEvent=========click========eventType====" << eventType;
return true;
}
if(0xF063 == msg->wParam )//禁用双击61539
{
qDebug() << "Dialog::nativeEvent=========double-click========eventType====" << eventType;
return true;
}
}
return QDialog::nativeEvent(eventType, message, result);
}
运行结果:
参考: