QtQuick2 无法将 ApplicationWindow 关闭信号连接到方法(C++ 新手)
Posted
技术标签:
【中文标题】QtQuick2 无法将 ApplicationWindow 关闭信号连接到方法(C++ 新手)【英文标题】:QtQuick2 Can't connect ApplicationWindow closing signal to method (C++ novice) 【发布时间】:2013-10-21 18:50:08 【问题描述】:我在为我用 QtQuick 编写的应用程序绑定“关闭”事件时遇到问题。我想做的是做标准的“确认退出”方法,也许我做错了。
据我了解,我想要类似的东西
void MainDriver::onClose(QEvent* event)
if(notSaved)
//prompt save
event->ignore();
else
event->accept();
但是,QQuickCloseEvent 似乎不是从 QEvent 派生的,或者我包含了错误的标头(很可能)并且我无法找到它的定义位置,以便我可以连接信号。
有没有更好的方法来解决这个问题?现在我像这样实例化主窗口:
QQmlApplicationEngine engine; //Actually initialized in the constructor
engine.load(QUrl("qrc:/qml/Window.qml"));
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
我使用 ApplicationWindow (QtQuick Controls) 作为从 QWindow 派生的主窗口。我愿意接受这里的建议,我想坚持使用 QtQuick,而不是将所有内容都包装在标准的 QWindow 或 QMainWindow 中,但这可能是一条糟糕的路线。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您可以使用EventFilter 来处理主窗口控制器中的关闭事件:
class MyEventFilter : public QObject
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event);
;
bool MyEventFilter::eventFilter(QObject *obj, QEvent *event)
if (event->type() == QEvent::Close)
// TODO: confirm
return true;
else
// standard event processing
return QObject::eventFilter(obj, event);
在你的 main() 中:
int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
MyEventFilter filter;
QtQuick2ApplicationViewer viewer;
viewer.installEventFilter(&filter);
viewer.setMainQmlFile(QStringLiteral("qml/QCloseConfirm/main.qml"));
viewer.showExpanded();
return app.exec();
Here 是示例。但它似乎并不完美。应该有更好的解决方案。
【讨论】:
以上是关于QtQuick2 无法将 ApplicationWindow 关闭信号连接到方法(C++ 新手)的主要内容,如果未能解决你的问题,请参考以下文章
QtQuick2:将 GLSL 着色器/图形效果应用于窗口元素?