C++传给qml的中文字符串乱码
解决方法:使用QStringLiteral宏
QString str = QStringLiteral("中文中文中文"));
加载时qml出现了两个窗口
原因:使用QQuickView或QQuickWidget加载qml时,qml代码中是不能以Window作为顶层元素的
解决方法:将顶层元素改为Rectange或者Item即可
加载qml时窗口一闪而过
原因:如果不是在main.cpp中(有return a.exec()那个)加载的,并且使用QQuickView/QQmlApplicationEngine时是在栈上创建的
解决方法:在堆上创建即可,如下面这段代码展示的是点击按钮出现qml窗口:
connect(ui->pushButton, &QPushButton::clicked, this, [=]()
{
// QQmlApplicationEngine加载qml
QQmlApplicationEngine *engine = new QQmlApplicationEngine();
engine->load(QUrl("qrc:/main.qml"));
// QQuickView加载qml
QQuickView *viwer = new QQuickView();
viwer->setSource(QUrl("qrc:/main.qml"));
viwer->show();
});
设置对象为上下文属性时接收不到对象中的信号
解决方法:创建对象时使用堆来创建而不是栈
DataObject *data = new DataObject();
ui->quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
ui->quickWidget->rootContext()->setContextProperty("TestData", data);
ui->quickWidget->setSource(QUrl("qrc:/main.qml"));