1. 程式人生 > >Qt中QStackedLayout類用法(選單葉切換介面)

Qt中QStackedLayout類用法(選單葉切換介面)

本文主要總結用QStackedLayout類的用法,主要通過新建一個例項,體現QStackedLaout類可以應用在切換選單上。QStackedLaout類是屬於佈局管理器中的一個常用類。

下面是一個例項,該例項是頂部兩個選單按鈕,分別點選兩個按鈕,將會切換不同頁面。比如點選pageOne按鈕,則切換到第一頁;點選pageTwo按鈕,則切換到第二頁。

1.1新建一個widget工程,以及兩個類,類名分別為PageOne和PageTwo。然後在如下檔案新增程式碼:

pageone.h

#ifndefPAGEONE_H
#definePAGEONE_H
#include<QWidget>
#include
<QVBoxLayout>
#include<QLabel>
#include<QPushButton>
classPageOne:publicQWidget
{
Q_OBJECT
public:
explicitPageOne(QWidget*parent=nullptr);
signals:
publicslots:
private:
QVBoxLayout*pageOneLayout;
QPushButton*m_pushButton;
};
#endif//PAGEONE_H

pageone.cpp

#include"pageone.h"
PageOne::PageOne(QWidget
*parent):QWidget(parent)
{
pageOneLayout=newQVBoxLayout(this);//注意,this表示在這個widget視窗顯示
m_pushButton=newQPushButton;
m_pushButton->setText(tr("成功切換到第一頁!"));
pageOneLayout->addWidget(m_pushButton);
}

pagetwo.h

#ifndefPAGETWO_H
#definePAGETWO_H
#include<QWidget>
#include<QVBoxLayout>
#include<QLabel>
#include<QPushButton>
classPageTwo:publicQWidget
{
Q_OBJECT
public:
explicitPageTwo(QWidget*parent=nullptr);
signals:
publicslots:
private:
QVBoxLayout*pageOneLayout;
QPushButton*m_pushButton;
};
#endif//PAGETWO_H

pagetwo.cpp

#include"pagetwo.h"
PageTwo::PageTwo(QWidget*parent):QWidget(parent)
{
pageOneLayout=newQVBoxLayout(this);//注意,this表示在這個widget視窗顯示
m_pushButton=newQPushButton;
m_pushButton->setText(tr("成功切換到第二頁!"));
pageOneLayout->addWidget(m_pushButton);
}

widget.h

#ifndefWIDGET_H
#defineWIDGET_H
#include<QWidget>
#include<QPushButton>
#include<QVBoxLayout>
#include<QHBoxLayout>
#include<QStackedLayout>
#include"pageone.h"
#include"pagetwo.h"
classWidget:publicQWidget
{
Q_OBJECT
public:
Widget(QWidget*parent=0);
~Widget();
privateslots:
voidOn_PushButton1Result();
voidOn_PushButton2Result();
private:
QVBoxLayout*mainLayout;
QHBoxLayout*topLayout;
QStackedLayout*stackLayout;
QPushButton*m_pushButton1,*m_pushButton2;
PageOne*m_pageOne;
PageTwo*m_pageTwo;
};
#endif//WIDGET_H

widget.cpp

#include"widget.h"
Widget::Widget(QWidget*parent)
:QWidget(parent)
{
//初始化
this->setObjectName("mainWidget");
this->setStyleSheet("#mainWidget{background-color:rgb(10,90,130);}");
mainLayout=newQVBoxLayout;
topLayout=newQHBoxLayout;
stackLayout=newQStackedLayout;
m_pushButton1=newQPushButton;
m_pushButton1->setText("pageOne");
m_pushButton1->setFixedHeight(50);//設定按鈕固定高度
//m_pushButton1->setStyleSheet("color:rgb(255,0,0);border:none");//設定按鈕字型顏色,無邊框
//m_pushButton1->setFlat(true);//祛除邊框
m_pushButton2=newQPushButton;
m_pushButton2->setText("pageTwo");
m_pageOne=newPageOne;
m_pageTwo=newPageTwo;
//窗口布局
//topLayout->addWidget(m_pushButton1,0,Qt::AlignLeft|Qt::AlignCenter);
topLayout->setMargin(0);//控制元件與窗體左右間距
topLayout->setSpacing(0);//Layout內部控制元件間距
topLayout->addWidget(m_pushButton1);
topLayout->addWidget(m_pushButton2);
stackLayout->addWidget(m_pageOne);//第一頁
stackLayout->addWidget(m_pageTwo);//第二頁
stackLayout->setCurrentIndex(0);//預設stackLayout顯示第0頁
mainLayout->addLayout(topLayout);//頂部介面
mainLayout->addLayout(stackLayout);//中間介面
mainLayout->setMargin(0);//控制元件與窗體左右間距
mainLayout->setSpacing(0);//Layout內部控制元件間距
mainLayout->setStretchFactor(topLayout,1);
mainLayout->setStretchFactor(stackLayout,10);
setLayout(mainLayout);//設定唯一佈局這句也可以用mainLayout=newQVBoxLayout(this);替代
connect(m_pushButton1,SIGNAL(clicked(bool)),this,SLOT(On_PushButton1Result()));
connect(m_pushButton2,SIGNAL(clicked(bool)),this,SLOT(On_PushButton2Result()));
}
Widget::~Widget()
{
}
voidWidget::On_PushButton1Result()
{
//按鈕1槽函式
stackLayout->setCurrentIndex(0);//切換到stackLayout第一頁
}
voidWidget::On_PushButton2Result()
{
//按鈕2槽函式
stackLayout->setCurrentIndex(1);//切換到stackLayout第二頁
}

main.c

#include"widget.h"
#include<QApplication>
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
Widgetw;
w.show();
returna.exec();
}


1.2程式構建執行後,如下圖所示。

        

由以上結果可知,該QStackedLayout類可以用在切換選單介面上。

參考內容:

https://blog.csdn.net/gyhguoge01234/article/details/53141613(重點參考)

https://blog.csdn.net/liang19890820/article/details/51539851

http://www.cnblogs.com/qq78292959/archive/2012/08/13/2637209.html(其它佈局管理器用法)