QtQuick Controls 2.0 を使い始めています。私は C++ の経験があり、Qt の経験も少しありますが、QML を使用したことはありません。
互いにリンクされている と がありますTabBar
。SwipeView
これが意味することは、 でページを選択するとTabBar
、SwipeView
がそのページに移動するということです。からページにスワイプするとSwipeView
、TabBar
がそれを反映して更新されます。
学習課題として、ユーザーを 2 番目のページに移動させるボタンを作成することにしました。TabBar
問題は、と の間のリンクを台無しにせずにそうする方法を見つけることができないように見えることですSwipeView
。
次のコードは、私が思いついた最高のものです。2 番目のページに正しく移動し、現在のページを変更して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();
}