Я начинаю работать с QtQuick Controls 2.0. У меня есть опыт работы с C ++ и небольшой опыт работы с Qt, но раньше я не работал с QML.
У меня есть TabBar
и SwipeView
, которые связаны друг с другом. Я имею в виду, что когда вы выбираете страницу на TabBar
, SwipeView
переходит на эту страницу. Когда вы переходите к странице из SwipeView
, TabBar
обновляется, чтобы отразить это.
В качестве обучающего упражнения я решил создать кнопку, которая отправляла бы пользователя на вторую страницу. Проблема в том, что я не могу найти способ сделать это, не нарушив связь между TabBar
и SwipeView
.
Следующий код - лучшее, что я придумал. Он правильно переходит на вторую страницу, и когда я меняю текущую страницу с TabBar
, SwipeView
все еще обновляется. Однако пролистывание на новую страницу больше не обновляет TabBar
. Похоже, что установка tabBar.currentIndex
на swipeView.currentIndex
имеет эффект установки по ссылке только тогда, когда выполняется двоеточие для инициализации. Знак равенства задается по значению. Как я могу перейти на конкретную страницу, сохранив неизменный swipeView.currentIndex == tabBar.currentIndex
?
// main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: tabBar.currentIndex
Page {
Button {
text: qsTr("Continue to Page 2")
onClicked: {
tabBar.currentIndex = 1;
// this next line merely sets tabBar.currentIndex to 1
tabBar.currentIndex = swipeView.currentIndex
}
anchors.centerIn: parent
width: text.implicitWidth
height: text.implicitHeight
}
}
Page {
Label {
text: qsTr("Second page")
anchors.centerIn: parent
}
}
}
footer: TabBar {
id: tabBar
currentIndex: swipeView.currentIndex
TabButton {
text: qsTr("First")
}
TabButton {
text: qsTr( "Second")
}
}
}
Код C ++ - это просто код по умолчанию, который мне предоставил Qt Creator:
// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
}