(资料图)
实例效果如下图:
如上图,堆栈窗口左半部分是一个 QListWidget 对象,右半部分是分别是三个标签。通过点击左边不同的项目,可以使得右边的Lable进行切换。 具体的结构是这样: 首先这个大的窗口是一个QDialog的派生,这个大窗口包含三个 子对象 :
一个QHBoxLayout布局对象,它将窗口分为左右两部分 一个QListWidget对象,包含三个Item 一个QStackedWidget对象,包含了三个标签对象代码如下: stackdlg.h ,定义了各个元素
1 #ifndef STACKDLG_H 2 #define STACKDLG_H 3 4 #include 5 #include 6 #include 7 #include 8 class StackDlg : public QDialog 9 {10 Q_OBJECT11 12 public:13 StackDlg(QWidget *parent = 0);14 ~StackDlg();15 private:16 QListWidget *list;17 QStackedWidget *stack;18 QLabel *lable1;19 QLabel *lable2;20 QLabel *lable3;21 };22 23 #endif // STACKDLG_H
stackdlg.cpp 具体实现
1 #include "stackdlg.h" 2 #include 3 StackDlg::StackDlg(QWidget *parent) 4 : QDialog(parent) 5 { 6 setWindowTitle(tr("StackedWidget")); 7 list=new QListWidget(this); //新建一个QListWidget控件对象 8 list->insertItem(0,tr("Window1"));//在QListWidget中插入三个条目作为选择项 9 list->insertItem(1,tr("Window2"));10 list->insertItem(2,tr("Window3"));11 //创建三个QLable标签控件对象,作为堆栈窗口需要显示的三层窗体12 lable1=new QLabel(tr("WindowTest1"));13 lable2=new QLabel(tr("WindowTest2"));14 lable3=new QLabel(tr("WindowTest3"));15 stack=new QStackedWidget(this);//新建一个QStackedWidget堆栈窗体对象16 //将三个QLable标签控件依次插入堆栈窗体中17 stack->addWidget(lable1);18 stack->addWidget(lable2);19 stack->addWidget(lable3);20 QHBoxLayout *mainlayout=new QHBoxLayout(this);21 mainlayout->setMargin(5);22 mainlayout->setSpacing(5);23 mainlayout->addWidget(list);24 mainlayout->addWidget(stack,0,Qt::AlignHCenter);25 mainlayout->setStretchFactor(list,1);26 mainlayout->setStretchFactor(stack,3);27 connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));28 }29 30 StackDlg::~StackDlg()31 {32 33 }
main.cpp如下:
1 #include "stackdlg.h" 2 #include 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication app(argc, argv); 7 Dialog w; 8 w.show(); 9 10 return app.exec();11 }
这个里面的重要代码有两个: 1. mainlayout->setStretchFactor(list,1); mainlayout->setStretchFactor(stack,3); 这个我在前面的文章中已经讲过: http://blog.csdn.net/leehdsniper/article/details/51005149,这里对list和stack的参数为1和3,区别就在于拉伸时的变化率的大小。 2. connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); 这个连接函数将QListWidget的信号 currentRowChange(int) 和QStackedWidget的槽 setCurrentIndex(int) 连接在一起,所以才导致了堆栈窗口的切换。
【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】
点击这里:
关键词: