окно размером 640х480 с заголовком "Hello World".
Внутри окна создаёт элемент MainForm, задав для MainForm весь внутренний размер окна,
при нажатии мышкой на MainForm в консоль будет выводится сообщение "Clicked on background. Text: ...".
TextEdit {
id: textEdit
text: qsTr("Enter some text...")
verticalAlignment: Text.AlignVCenter
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
Rectangle {
anchors.fill: parent
anchors.margins: -10
color: "transparent"
border.width: 1
}
}
}
Rectangle, область обработки событий мышки MouseArea.
Внутри формы поле ввода текста TextEdit,
размеры рисуются отдельным, вставленным внутрь, прямоугольником Rectangle.
QObject *rect = object->findChild Дочерние объекты можно искать с помощью QObject::findChild(), используя свойство QObject::objectName Дочерних элементов с одним и тем же именем может быть несколько - QObject::findChildren()
if (rect) rect->setProperty("color", "red");
Код пишется на Javascript.
Функции (или методы) могут быть вызваны из C++ с использованием QMetaObject::InvokeMethod().
Параметры метода и возвращаемых значений, переданные из QML, всегда переводятся в тип QVariant.
Все сигналы QML автоматически доступны для C++, и могут быть подключены к использованию QObject::connect(), как и любой сигнал Qt C++.
любой сигнал C++ может быть получен с помощью объекта QML с использованием обработчиков сигналов:
компонент QML с сигналом qmlSignal.
сигнал подключается к слоту cppSlot() на C++ с помощью QObject::connect().
Метод cppSlot() вызывается всякий раз по сигналу qmlSignal
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QObject *item = view.rootObject();
MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)), &myClass, SLOT(cppSlot(QString)));
view.show();
return app.exec();
}
тип объектов QML в качестве параметров? Тогда в QML вместо типа необходимо задать слово var, а в C++ использовать QVariant
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QObject *item = view.rootObject();
MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QVariant)),
&myClass, SLOT(cppSlot(QVariant)));
view.show();
return app.exec();
}
QQmlApplicationEngine еще способ
У QQmlApplicationEngine есть метод rootObjects() - список корневых объектов
то есть корневых объектов несколько, а не один, как у QQuickView
Для этого зададим имя objectName: "mainForm" для MainForm в main.qml и имя objectName: "textEdit1" для TextEdit в MainForm.ui.qml. Теперь мы сможем искать его по этому имени
MainForm {
anchors.fill: parent
btnSelect.onClicked: {
fileDialog.open();
}
fileDialog.onAccepted: {
console.log("Accepted: " + fileDialog.fileUrls);
for (var i = 0; i < fileDialog.fileUrls.length; ++i)
txfPath.text = fileDialog.fileUrls[i];
}
}
}
http://doc.qt.io/qt-5/qml-qtquick-dialogs-filedialog.html
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть