本文来说一个堆栈窗体吧,这可是经常用到滴!效果如下图所示:
选中左侧QListWidget列表框中不同的选项时,在右侧QStackedWidget就会显示所选的窗体。
=====================实现的头文件stackdialog.h====================
#ifndef STACKDIALOG_H
#define STACKDIALOG_H
#include <QtGui/QDialog>
class QLabel;
class QListWidget;
class QStackedWidget;
class StackDialog : public QDialog
{
Q_OBJECT
public:
StackDialog(QWidget *parent=0);
QLabel *label1;
QLabel *label2;
QLabel *label3;
QListWidget *list;
QStackedWidget *stack;
};
#endif // STACKDIALOG_H
======================实现源文件stackdialog.cpp===================
#include "stackdialog.h"
#include <QtGui/QListWidget>
#include <QtGui/QLabel>
#include <QtGui/QStackedWidget>
#include <QtGui/QHBoxLayout>
StackDialog::StackDialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("Stacked Widgets"));
//左侧列表框
list = new QListWidget(this);
list->insertItem(0, tr("Window 1"));
list->insertItem(1, tr("Window 2"));
list->insertItem(2, tr("Window 3"));
label1 = new QLabel(tr("This is Window 1"));
label2 = new QLabel(tr("This is Window 2"));
label3 = new QLabel(tr("This is Window 3"));
//右侧堆栈窗口
stack = new QStackedWidget(this);
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
//对整个对话框进行布局
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(5);
mainLayout->setSpacing(5);
mainLayout->addWidget(list);
mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
mainLayout->setStretchFactor(list, 1); //左侧列表框占1
mainLayout->setStretchFactor(stack, 3);//右侧堆栈窗口占3
connect(list, SIGNAL(currentRowChanged(int)),
stack, SLOT(setCurrentIndex(int)));
}
=====================工程的pro文件==========================
#-------------------------------------------------
#
# Project created by QtCreator 2010-08-17T22:00:42
#
#-------------------------------------------------
QT += core
TARGET = StackDialog
CONFIG += Windows
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp /
stackdialog.cpp
HEADERS += /
stackdialog.h
=======================main函数===========================
#include <QtGui/QApplication>
#include "stackdialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
StackDialog dlg;
dlg.show();
return app.exec();
}
在实际应用中,堆栈窗体多与列表框QListWidget及下拉列表框QComboBox配合使用!!