1. 程式人生 > >qt基於qstackedwidget的同一視窗介面變換實現

qt基於qstackedwidget的同一視窗介面變換實現

想要實現點選文字,直線,時間三個按鈕,對話方塊介面部分同一位置發生變化,變為相應的引數選擇。

剛開始使用的hide(),show(),後來發現由於棧的原因,三個部分由於位置重疊,有前後之分,所以只能調節一個,其他部分不能調節,雖然可以看到。

嘗試用lower(),raise()也沒成功。

後來想用QstackedWidgett和QStackedLayout巢狀使用,QstackedWidget1和QstackedWidget2分別由QStackedLayout佈局,然後通過按鈕相應,設定QStackedLayout引數0,1和QstackedWidget1、QstackedWidget2的0或1,這樣就能對應四種狀態,但是由於我的QStackedLayout不能被其他佈局巢狀所以放棄了,其實應該QStackedLayout

不能巢狀其他佈局,而其他佈局可以巢狀QStackedLayout。 但是我這裡很奇怪,完後再試試。

最後用兩個QstackedWidget實現了,但是佈局還是個問題,雖然大布局可以實現,但是兩個QstackedWidgetQstackedWidget1放在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);
}

就能實現,如圖,佈局上有些錯誤,