1. 控件位置
Containers→StackedWidget
2.控件介绍
StackedWidget控件中文称作“控件栈”。Qt提供了这样一个控件栈,可以使开发人员用栈管理控件像用栈管理其他数据类型一样简单。控件栈只显示栈顶的控件。开发人员可以使用raiseWidget()函数把栈中任何其他控件移到栈顶,从而实现控件之间的切换。
3.控件设置选项
在Stacked Widget控件的properties选项中,一般常对以下选项进行设置。
name:该控件对应源代码中的名称;
currentPage:当前活动的页面;
pageName:当前活动页的名称;
font:设置该控件内部文本的字体。
4.常用成员函数
1) QWidgetStack::QWidgetStack ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的WidgetStack。
2) int QWidgetStack::addWidget ( QWidget *w, int id = -1 )
把控件w添加到该控件栈中,标识是id。
3) int QWidgetStack::id ( QWidget *w ) const
返回控件w的标识。
4) void QWidgetStack::raiseWidget ( int id ) [slot]
把标识为id的控件升到该控件栈的栈顶。
5) void QWidgetStack::raiseWidget ( QWidget *w ) [slot]
把控件w升到该控件栈的栈顶。
6) void QWidgetStack::removeWidget ( QWidget *w )
把控件w从该控件栈中删除。
7) QWidget *QWidgetStack::widget ( int id ) const
返回标识是id的控件。
4.应用
QStackedWidget类继承于QFrame类,用于堆栈窗体的管理。
Public Slots:
void setCurrentIndex( int index ) index参数的索引位置的部件,是可见的。(index默认为-1,表示堆栈为空)
void setCurrentWidget( QWidget * widget ) widget参数指定的部件,是可见的。
实现效果:
maindlg.h
- #ifndef MAINDLG_H
- #define MAINDLG_H
- #include <QtGui>
- class MainDlg : public QDialog
- {
- Q_OBJECT
- public:
- MainDlg(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~MainDlg();
- private:
- QLabel *lab1;
- QLabel *lab2;
- QLabel *lab3;
- QListWidget *m_list;
- QStackedWidget *stack;
- };
- #endif // MAINDLG_H
maindlg.cpp
- #include "maindlg.h"
- MainDlg::MainDlg(QWidget *parent, Qt::WFlags flags)
- : QDialog(parent, flags)
- {
- setWindowTitle(tr("Stacked Widgets example"));
- //左部的列表框:
- m_list = new QListWidget;
- m_list->insertItem(0,tr("Window 1"));
- m_list->insertItem(1,tr("Window 2"));
- m_list->insertItem(2,tr("Window 3"));
- //右部的堆栈窗:
- stack = new QStackedWidget(this);
- lab1 = new QLabel(tr("This is window 1"));
- stack->addWidget(lab1);
- lab2 = new QLabel(tr("This is window 2"));
- stack->addWidget(lab2);
- lab3 = new QLabel(tr("This is window 3"));
- stack->addWidget(lab3);
- //布局;
- QHBoxLayout *mainLayout = new QHBoxLayout(this);
- mainLayout->addWidget(m_list);
- mainLayout->addWidget(stack,0,Qt::AlignHCenter);
- mainLayout->setMargin(5);
- mainLayout->setSpacing(5);
- mainLayout->setStretchFactor(m_list,1);
- mainLayout->setStretchFactor(stack,3);
- connect(m_list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
- }
- MainDlg::~MainDlg()
- {
- }