lovejobs

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.QT创建堆叠窗口使用类,但是使用它时主窗口不能是MainWindow,否则会出现布局错误,本例中使用基类为QDialog

QStackedWidget

2.可以配合列表框QListWidget和QComboBox使用

3.先看代码stackwindow.h文件:

#define STACKWINDOW_H

#include <QDialog>
#include <QListWidget>//列表框
#include <QStackedWidget>//堆栈窗体
#include <QLabel>


class StackWindow : public QDialog
{
    Q_OBJECT

public:
    StackWindow(QWidget *parent = 0);
    ~StackWindow();

    void initWindow();

private:
    QListWidget *_lw;
    QStackedWidget *_sw;
    QLabel *_lb1;
    QLabel *_lb2;
    QLabel *_lb3;
};

#endif // STACKWINDOW_H

4.看主文件stackwindow.cpp,代码主要封装在initWindow函数中

#include "stackwindow.h"
#include <QVBoxLayout>

StackWindow::StackWindow(QWidget *parent)
    : QDialog(parent)
{
    initWindow();

}

StackWindow::~StackWindow()
{

}

void StackWindow::initWindow()
{
    setWindowTitle("堆栈窗体");



    //初始化控件
    _lw = new QListWidget(this);



    //QListWidget中插入选择项

    _lw->insertItem(0,"主页");
    _lw->insertItem(1,"娱乐");
    _lw->insertItem(2,"八卦");

    //初始化标签控件
    _lb1 = new QLabel("看新闻",this);
    _lb2 = new QLabel("看娱乐",this);
    _lb3 = new QLabel("看八卦",this);
    //创建堆叠窗体
    _sw = new QStackedWidget(this);//父对象为主窗体
    //_sw->setStyleSheet("background:red");
    //将三个label加入_sw中
    _sw->addWidget(_lb1);
    _sw->addWidget(_lb2);
    _sw->addWidget(_lb3);


    //对主窗口布局

    QHBoxLayout *hl = new QHBoxLayout();
    hl->setMargin(10);//设置边距
    hl->setSpacing(10);//设置控件间距

    //布局中加入窗体
    hl->addWidget(_lw);
    hl->addWidget(_sw,0,Qt::AlignHCenter);

    hl->setStretchFactor(_lw,1);//设置控件尺寸占比
    hl->setStretchFactor(_sw,3);//



    setLayout(hl);


    connect(_lw,SIGNAL(currentRowChanged(int)),_sw,SLOT(setCurrentIndex(int)));


}

5.main文件比较简单

#include "stackwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    StackWindow w;
    w.show();

    return a.exec();
}

6.看一下运行效果:

 

posted on 2018-01-07 16:35  lovejobs  阅读(3212)  评论(0编辑  收藏  举报