我有一个QML应用程序,我在其中使用QApplication
创建了使用QML创建主屏幕的子类。我的问题是单击关闭按钮应用程序按预期关闭,但我想处理一种情况,如果某些服务正在运行,我想覆盖关闭按钮的行为。
我试图在没有任何运气的情况下覆盖closeEvent()
。任何人都可以指出我可以处理这个问题吗?
更新:这是我尝试过的代码段
class SingleApplication : public QApplication {
Q_OBJECT
public:
SingleApplication(int &argc, char **argv);
void closeEvent ( QCloseEvent * event )
{
event->ignore();
}
}
的main.cpp
#include "view.h"
#include <QDebug>
#include <QDesktopWidget>
#include "SingleApplication.h"
int main(int argc, char *argv[])
{
SingleApplication app(argc, argv);
if(!app.isRunning()) {
app.processEvents();
View view(QUrl("qrc:/qml/main.qml"));
#ifdef Q_OS_LINUX
view.setFlags(Qt::WindowMinimizeButtonHint|Qt::WindowCloseButtonHint);
#endif
view.setMaximumSize(QSize(1280,700));
view.setMinimumSize(QSize(1280,700));
// Centering the App to the middle of the screen
int width = view.frameGeometry().width();
int height = view.frameGeometry().height();
QDesktopWidget wid;
int screenWidth = wid.screen()->width();
int screenHeight = wid.screen()->height();
view.setGeometry((screenWidth/2)-(width/2),(screenHeight/2)-(height/2),width,height);
view.show();
return app.exec();
}
return 0;
}
答案 0 :(得分:1)
没有QApplication :: closeEvent。这样的虚函数属于QWidget。
使用QApplication表示您的QML UI有正常的QWidget容器(正如您所说的UI基于QML)。您应该覆盖该小部件closeEvent,例如:
class MyMainWidget : public QWidget // or is it QMainWindow?
{
// snip
private:
void closeEvent(QCloseEvent*);
}
void MyMainWidget::closeEvent(QCloseEvent* event)
{
// decide whether or not the event accepted
if (condition())
event->accept();
}
如果您的容器小部件尚未被覆盖(只是QWidget?),那么现在您必须这样做。
你没有说你是否想让应用程序窗口继续运行。我想你也想要那个。