【发布时间】:2013-09-06 23:56:36
【问题描述】:
我创建了一个 Sailfish 应用(使用最新的 Sailfish SDK)。我在将 C++ 对象暴露给 QML 时遇到问题。它继承了QSettings,
class Settings : public QSettings
{
Q_OBJECT
/**/
public:
explicit Settings() : QSettings("Marcin Mielniczuk", "BigText") {}
~Settings() { qDebug() << "Dying"; }
/**/
};
我注意到根本没有调用析构函数。 (没有析构函数输出)
我这样创建对象:
import QtQuick 2.0
import Sailfish.Silica 1.0
import BigText 1.0
import "pages"
ApplicationWindow
{
initialPage: MainPage { }
Settings {id: settings}
}
我的 main.cpp 是:
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QGuiApplication> app(Sailfish::createApplication(argc, argv));
qmlRegisterType<Settings>("BigText", 1, 0, "Settings");
QScopedPointer<QQuickView> view(Sailfish::createView("main.qml"));
Sailfish::showView(view.data());
return app->exec();
}
我做错了什么?
/edit: 未打印的文本不是实际问题——它只是问题的一个指标。析构函数中的 QSettings 同步也不起作用。
EDIT2:请注意,我使用的是 Sailfish Silica 中的 ApplicationWindow,而不是 QtQuick.Controls,并且窗口显示正常。这些组件必须与库存的 qt 快速组件有所不同。
【问题讨论】:
-
QSettings的析构函数是虚拟的吗?
-
将 qDebug 更改为 std::cout,我认为,qDebug 可能正在使用事件循环...
-
没有成功,但无论如何也无法解决问题 - 在析构函数中同步 QSettings 也无法正常工作...(即使没有显式析构函数)
-
doctorlove:是的,QSettings继承自QObject,其析构函数是virtual。
-
嗯,确实没有错。看看我的回复。
标签: c++ qt qml destructor qt5