QML FileDialog установить заголовок из кода C ++

У меня есть следующий файл 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
}

Я хочу установить title свойство из кода C ++. У меня есть код, который выглядит так:

QQmlEngine engine;
QQmlComponent component( &engine );
component.loadUrl( QUrl( QStringLiteral( "qrc:/qml/my_file_dialog.qml" ) ) );
QObject* object = component.create();
object->setProperty( "myTitle", "Open file!" );

Название имеет начальное значение (Select file to open) имущества myTitle и никогда не меняется на Open file!

Что я делаю неправильно?

ОБНОВИТЬ
Я также пытался обновить заголовок непосредственно из кода C ++.

Учитывая, что у меня есть объект диалога, я обновляю плитку следующим образом:

QQmlProperty::write( dialog, "title", "testing title" );

А также вот так:

dialog->setProperty( "title", "testing title" );

Название свойства диалогового окна файла не задано.

Как отметил @Tarod в своем ответе, это похоже на ошибку.

Или я что-то упустил?

1

Решение

Это кажется ошибкой, потому что следующий код работает, если мы установим

title = "xxx"

вместо

title = myTitle

Также вы можете проверить, правильно ли обновляются другие свойства. То есть sidebarVisible

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlComponent>
#include <QQmlProperty>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);

QQmlEngine engine;
QQmlComponent component(&engine, QUrl(QLatin1String("qrc:/main.qml")));
QObject *object = component.create();

QObject *fileDialog = object->findChild<QObject*>("fileDialogObj");

if (fileDialog)
{
fileDialog->setProperty("myTitle", "new title");
fileDialog->setProperty("sidebarVisible", true);
qDebug() << "Property value:" << QQmlProperty::read(fileDialog, "myTitle").toString();
} else
{
qDebug() << "not here";
}

return app.exec();
}

main.qml

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQml 2.2
import QtQuick.Dialogs 1.2

Item {
FileDialog
{
property string myTitle: fileDialog.title
property string myfilter: "All files (*)"
id: fileDialog
objectName: "fileDialogObj"title: "Select file to open"folder: shortcuts.home
sidebarVisible : true
nameFilters: [ myfilter ]

onAccepted:
{
close()
}
onRejected:
{
close()
}
Component.onCompleted:
{
visible = true
}
onMyTitleChanged:
{
console.log("The next title will be: " + myTitle)
title = myTitle
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]