lovejobs

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  138 随笔 :: 3 文章 :: 46 评论 :: 28万 阅读

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   lovejobs  阅读(3246)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示