Qt之布局管理——堆栈窗体QStackedWidget

来源:互联网 发布:h3c 7506e 端口镜像 编辑:程序博客网 时间:2024/05/05 01:08


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参数指定的部件,是可见的。


实现效果:

image



maindlg.h

  1. #ifndef MAINDLG_H  
  2. #define MAINDLG_H  
  3.   
  4. #include <QtGui>  
  5.   
  6.   
  7. class MainDlg : public QDialog  
  8. {  
  9.     Q_OBJECT  
  10.   
  11. public:  
  12.     MainDlg(QWidget *parent = 0, Qt::WFlags flags = 0);  
  13.     ~MainDlg();  
  14.   
  15. private:  
  16.     QLabel *lab1;  
  17.     QLabel *lab2;  
  18.     QLabel *lab3;  
  19.     QListWidget *m_list;  
  20.     QStackedWidget *stack;  
  21. };  
  22.   
  23. #endif // MAINDLG_H  


maindlg.cpp

  1. #include "maindlg.h"  
  2.   
  3.   
  4. MainDlg::MainDlg(QWidget *parent, Qt::WFlags flags)  
  5.     : QDialog(parent, flags)  
  6. {  
  7.     setWindowTitle(tr("Stacked Widgets example"));  
  8.   
  9.     //左部的列表框:  
  10.     m_list = new QListWidget;  
  11.     m_list->insertItem(0,tr("Window 1"));  
  12.     m_list->insertItem(1,tr("Window 2"));  
  13.     m_list->insertItem(2,tr("Window 3"));  
  14.   
  15.     //右部的堆栈窗:  
  16.     stack = new QStackedWidget(this);  
  17.     lab1 = new QLabel(tr("This is window 1"));  
  18.     stack->addWidget(lab1);  
  19.     lab2 = new QLabel(tr("This is window 2"));  
  20.     stack->addWidget(lab2);  
  21.     lab3 = new QLabel(tr("This is window 3"));  
  22.     stack->addWidget(lab3);    
  23.   
  24.     //布局;  
  25.     QHBoxLayout *mainLayout = new QHBoxLayout(this);  
  26.     mainLayout->addWidget(m_list);  
  27.     mainLayout->addWidget(stack,0,Qt::AlignHCenter);  
  28.     mainLayout->setMargin(5);  
  29.     mainLayout->setSpacing(5);  
  30.     mainLayout->setStretchFactor(m_list,1);  
  31.     mainLayout->setStretchFactor(stack,3);  
  32.     connect(m_list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));  
  33.   
  34. }  
  35.   
  36. MainDlg::~MainDlg()  
  37. {  
  38.   
  39. }  




0 0