【Qt示例】分割、停靠、堆栈窗体

本文介绍了使用Qt库在C++中实现的三种窗口管理技巧,包括QSplitter进行水平和垂直分割窗口,QDockWidget实现停靠窗口,以及QListWidget和QStackedWidget构建堆栈窗口。展示了如何在GUI应用程序中灵活布局控件。
摘要由CSDN通过智能技术生成

示例1 分割窗口

在这里插入图片描述

  • main.cpp 添加以下代码:
#include "mainwindow.h"

#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont font("AYSong18030", 12);  //指定显示字体
    a.setFont(font);
    //创建主分割窗口,水平分割
    QSplitter *splitterMain = new QSplitter(Qt::Horizontal,0);
    //新建文本编辑框,赋初始值并插入主窗口中
    QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    //设定TextEdit中文字的对齐方式,居中对齐
    textLeft->setAlignment(Qt::AlignCenter);
    //以主分割窗口为父窗口创建一个右分割窗口,垂直分割
    QSplitter *splitterRight = new QSplitter(Qt::Vertical,splitterMain);
    splitterRight->setOpaqueResize(true);      //拖曳时是否实时更新显示

    QTextEdit *textUp = new QTextEdit(QObject::tr("Top Widget"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);

    QTextEdit *textBottom = new QTextEdit(QObject::tr("Bottom Widget"), splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);
    //设定可伸控件,第一个参数指定设置的控件序号,第二个参数大于0的数表示可伸缩
    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

//    MainWindow w;
//    w.show();
    return a.exec();
}

示例2 停靠窗口

在这里插入图片描述

  • 在mainwindow.cpp 的类构造函数中添加如下代码:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("DockWindows"));
    QTextEdit *te= new QTextEdit(this);
    te->setText(tr("Main window"));
    te->setAlignment(Qt::AlignCenter);
    setCentralWidget(te);
	//创建停靠窗口
    QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);
    //设定窗口特性:可移动
    dock->setFeatures(QDockWidget::DockWidgetMovable);
    //设置停靠区域:左 / 右
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    //在停靠窗口中添加文本编辑框
    QTextEdit *te1 = new QTextEdit();
    te1->setText(tr("Window1,The dock Widget can be moved between docks by the user" ""));
    dock->setWidget(te1);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    dock = new QDockWidget(tr("DockWindow2"),this);
    dock->setFeatures(QDockWidget::DockWidgetClosable |
                      QDockWidget::DockWidgetFloatable);
    QTextEdit *te2 = new QTextEdit();
    te2->setText(tr("Window2, . . ."));
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea, dock);

    dock = new QDockWidget(tr("DockWindow3"),this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures);
    QTextEdit *te3 = new QTextEdit();
    te3->setText(tr("Window3, . . ."));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);
}

示例3 堆栈窗口

在这里插入图片描述

  • dialog.cpp 类的构造函数添加如下代码:
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    list = new QListWidget(this);
    //在QListWidget控件中插入三个条目,作为选择项
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

    //创建堆栈窗口,以及需要显示的三层窗体
    stack = new QStackedWidget(this);
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest2"));
    label3 = new QLabel(tr("WindowTest3"));
    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);   //设定可伸缩控件
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),
            stack,SLOT(setCurrentIndex(int)));
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值