QtQuick2 无法将应用程序窗口关闭信号连接到方法(C++新手)
QtQuick2 Can't connect ApplicationWindow closing signal to method (C++ novice)
我在为用QtQuick编写的应用程序绑定"On Close"事件时遇到问题。我想做的是做标准的"确认退出"方法,也许我以错误的方式做到这一点。
据我了解,我想要类似的东西
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);
我正在使用应用程序窗口(QtQuick Controls)作为从QWindow派生的主窗口。我愿意在这里接受建议,我想坚持使用QtQuick,而不是将所有内容包装在标准的QWindow或QMainWindow中,但也许这是一条糟糕的路线。任何帮助将不胜感激。
您可以使用 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);
}
}
在你的主():
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();
}
这是一个例子。但它似乎并不完美。应该有更好的解决方案。
相关文章:
- Qt将信号与另一个类方法连接
- 连接和压缩标准::vector<std::字符串的最佳方法>
- Qt中的包装连接方法隐藏了编译器所需的信息
- 连接按位运算的正确方法
- 连接字符串的最佳方法是什么?
- 什么是将对象相互连接的干净有效的方法
- 如何将QObbject(QPushButton)连接到其他类的方法
- 通过IPC连接Qt4和Qt5进程的最佳方法是什么?
- 如何使用方法连接按钮,请单击
- 使用连接方法连接到插槽
- 破坏TCP连接的好方法
- 使用C或C++检查互联网连接的最快方法是什么
- C++中将不同类型的变量列表连接到逗号分隔字符串的最快方法是什么?
- 从开箱即用的应用程序连接PostgreSQL的简便方法?(嵌入PostgreSQL)
- C++附加两个数组(连接两个数组)的最快方法
- 对百万或十亿个 STL 向量进行排序和连接的最快方法
- 有没有一种方法可以将升压信号直接连接到另一个信号
- 在应用程序中检查互联网连接C++可靠方法:gethostbyname() 失败
- 处理客户端连接的最有效方法(套接字编程)
- Qt将GUI类中的方法连接到另一个类中的插槽