【发布时间】:2017-10-04 00:49:04
【问题描述】:
我有以下 qml 文件:
import QtQuick 2.2
import QtQuick.Dialogs 1.2
FileDialog
{
property string myTitle: "Select file to open"
property string myfilter: "All files (*)"
id: fileDialog
objectName: "fileDialogObj"
title: myTitle
folder: shortcuts.home
sidebarVisible : true
nameFilters: [ myfilter ]
onAccepted:
{
close()
}
onRejected:
{
close()
}
Component.onCompleted: visible = true
}
我想从 C++ 代码中设置 title 属性。我的代码看起来像:
QQmlEngine engine;
QQmlComponent component( &engine );
component.loadUrl( QUrl( QStringLiteral( "qrc:/qml/my_file_dialog.qml" ) ) );
QObject* object = component.create();
object->setProperty( "myTitle", "Open file!" );
标题具有属性myTitle的初始值(Select file to open),并且永远不会更改为Open file!
我做错了什么?
更新 我也尝试过直接从 C++ 代码更新标题。
考虑到我有对话框对象,我像这样更新磁贴:
QQmlProperty::write( dialog, "title", "testing title" );
还有这样的:
dialog->setProperty( "title", "testing title" );
文件对话框的属性标题没有设置。
正如@Tarod 在他的回答中提到的,这似乎是一个错误。
还是我错过了什么?
【问题讨论】:
-
别名:
property alias myTitle: fileDialog.title和 setProperty 怎么样?我假设属性绑定可能会被属性更改破坏,或者没有。别名将强制执行该绑定。
标签: c++ qml qtquick2 filedialog qqmlcomponent