qt基於qstackedwidget的同一視窗介面變換實現
阿新 • • 發佈:2019-02-01
想要實現點選文字,直線,時間三個按鈕,對話方塊介面部分同一位置發生變化,變為相應的引數選擇。
剛開始使用的hide(),show(),後來發現由於棧的原因,三個部分由於位置重疊,有前後之分,所以只能調節一個,其他部分不能調節,雖然可以看到。
嘗試用lower(),raise()也沒成功。
後來想用QstackedWidgett和QStackedLayout巢狀使用,QstackedWidget1和QstackedWidget2分別由QStackedLayout佈局,然後通過按鈕相應,設定QStackedLayout引數0,1和QstackedWidget1、QstackedWidget2的0或1,這樣就能對應四種狀態,但是由於我的QStackedLayout不能被其他佈局巢狀所以放棄了,其實應該QStackedLayout 不能巢狀其他佈局,而其他佈局可以巢狀QStackedLayout。 但是我這裡很奇怪,完後再試試。
最後用兩個QstackedWidget實現了,但是佈局還是個問題,雖然大布局可以實現,但是兩個QstackedWidget,QstackedWidget1放在QstackedWidget2 裡面,QstackedWidget2隨整體佈局變大變小,QstackedWidget1卻不會變,還是個問題。。。
就先到這裡,程式碼如下,這不是專案本身,只是個測試程式碼。
注意ui裡面將兩個QstackedWidget巢狀,一個拖到另一個裡面
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QLabel> #include <QPushButton> #include <QStackedLayout> #include <QHBoxLayout> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->stackedWidget_2->setCurrentIndex(0); QHBoxLayout *hl = new QHBoxLayout(this); hl->addWidget(ui->stackedWidget); hl->addWidget(ui->stackedWidget_2); hl->addLayout(ui->verticalLayout_2); setLayout(hl); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_btn1_clicked() { ui->stackedWidget_2->setCurrentIndex(0); } void MainWindow::on_btn2_clicked() { ui->stackedWidget_2->setCurrentIndex(1); ui->stackedWidget->setCurrentIndex(1); } void MainWindow::on_btn3_clicked() { ui->stackedWidget_2->setCurrentIndex(1); ui->stackedWidget->setCurrentIndex(0); }
就能實現,如圖,佈局上有些錯誤,