1

我有一个 QML 应用程序,我在其中进行了子类化QApplication以使用 QML 创建我的主屏幕。我遇到的问题是单击关闭按钮应用程序按预期关闭,但我想处理如果某些服务正在运行我想覆盖关闭按钮行为的情况。

我尝试过closeEvent()没有任何运气的覆盖。谁能指出我可以处理这个问题的一些方法?

更新:这是我试过的代码片段

class SingleApplication : public QApplication {
    Q_OBJECT
public:
    SingleApplication(int &argc, char **argv);

    void closeEvent ( QCloseEvent * event )
    {
        event->ignore();

    }
}

主文件

#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;

}
4

1 回答 1

2

没有 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?),那么现在你必须这样做。

而且您没有说是否要保持应用程序窗口运行。我想你也想要那个。

于 2015-07-10T22:48:17.670 回答