qt布局

本文介绍了Qt编程中如何使用QSplitter进行窗口分割,包括水平和垂直方向的分割,以及设置分割条的实时更新显示。同时讲解了QDockWidget的特性设置,如停靠窗体的可关闭、移动和浮动功能,以及停靠区域的选择。此外,还展示了QStackedWidget实现的堆栈窗体,通过QListWidget点击切换内容。这些内容对于理解Qt界面布局和窗体管理具有指导意义。
摘要由CSDN通过智能技术生成

qt布局

分割窗口

在这里插入图片描述

(1)新建Qt Widgets Application(详见1.3.1节),项目名称为“Splitter”,基类选择“QMainWindow”,取消“创建界面”复选框的选中状态。
(2)在上述工程的“main.cpp”文件中添加如下代码。
其中,
(a) QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0):新建一个QSplitter类对象,作为主分割窗口,设定此分割窗口为水平分割窗口。
(b) QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain):新建一个QTextEdit类对象,并将其插入主分割窗口中。
(c) textLeft->setAlignment(Qt::AlignCenter):设定TextEdit中文字的对齐方式,常用的对齐方式有以下几种。
(d) QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain):新建一个QSplitter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
(e) splitterRight->setOpaqueResize(false):调用setOpaqueResize(bool)方法用于设定分割窗口的分割条在拖曳时是否为实时更新显示,若设为true则实时更新显示,若设为false则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显示分割条。
(f) splitterMain->setStretchFactor(1,1):调用setStretchFactor()方法用于设定可伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。

QDockWidget停靠窗口

在这里插入图片描述

(a) setFeatures()方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种参数。
① QDockWidget::DockWidgetClosable:停靠窗体可关闭。
② QDockWidget::DockWidgetMovable:停靠窗体可移动。 
③ QDockWidget::DockWidgetFloatable:停靠窗体可浮动。
④ QDockWidget::AllDockWidgetFeatures:此参数表示拥有停靠窗体的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移动、不可关闭、不可浮动。
(b) setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:
void setAllowedAreas(Qt::DockWidgetAreas  areas)
参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种参数。
① Qt::LeftDockWidgetArea:可在主窗口的左侧停靠。
② Qt::RightDockWidgetArea:可在主窗口的右侧停靠。
③ Qt::TopDockWidgetArea:可在主窗口的顶端停靠。
④ Qt::BottomDockWidgetArea:可在主窗口的底部停靠。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四个)部位停靠。
⑥ Qt::NoDockWidgetArea:只可停靠在插入处。


堆栈窗体QStackedWidget类(点击切换窗口)

在这里插入图片描述

QLayout

在这里插入图片描述

Horizontal 水平

vertical 垂直

layout,代码 E:\qt\workspace\space3\layout

main

#include "widget.h"

#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>
#include "userinfo.h"
#include "content.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont font("ZYSong18030",12);
    a.setFont(font);

    QSplitter* splitter = new QSplitter(Qt::Horizontal,0);
    splitter->setOpaqueResize(true);

    QListWidget* list = new QListWidget(splitter);
    list->insertItem(0,QObject::tr("基本信息"));
    list->insertItem(1,QObject::tr("联系方式"));
    list->insertItem(2,QObject::tr("详细资料"));
    list->insertItem(3,QObject::tr("基本信息设计师"));

    Content* content = new Content(splitter);

    QObject::connect(list,SIGNAL(currentRowChanged(int)),content->getStack(),SLOT(setCurrentIndex(int)));//(b)


    //设置主布局框即水平分割窗的标题
    splitter->setWindowTitle(QObject::tr("修改用户资料"));
    //设置主布局框即水平分割窗的最小尺寸
    splitter->setMinimumSize(splitter->minimumSize());
    //设置主布局框即水平分割窗的最大尺寸
    splitter->setMaximumSize(splitter->maximumSize());
    splitter->show();	//显示主布局框,其上面的控件一同显示
    //content->show();

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

content

#include "content.h"
#include<QVBoxLayout>
Content::Content(QWidget *parent): QFrame(parent)
{

    stack = new QStackedWidget(this);
    stack->setFrameStyle(QFrame::Panel|QFrame::Raised);

    userInfo1 = new userInfo();
    contact = new Contact();
    detail = new Detail();
    baseInfo = new BaseInfo;
    stack->addWidget(baseInfo);
    stack->addWidget(contact);
    stack->addWidget(detail);
    stack->addWidget(userInfo1);

    /* 创建两个按钮 */					//(b)
//    AmendBtn =new QPushButton(tr("修改"));
//    CloseBtn =new QPushButton(tr("关闭"));
    QHBoxLayout *BtnLayout =new QHBoxLayout;
    BtnLayout->addStretch(1);
//    BtnLayout->addWidget(AmendBtn);
//    BtnLayout->addWidget(CloseBtn);
    /* 进行整体布局 */
    QVBoxLayout *RightLayout =new QVBoxLayout(this);
    RightLayout->setMargin(10);
    RightLayout->setSpacing(6);
    RightLayout->addWidget(stack);
    RightLayout->addLayout(BtnLayout);
}

Content::~Content()
{

}

QStackedWidget *Content::getStack() const
{
    return stack;
}

设计师也是很快的

在这里插入图片描述

仅此记录,qt5.12教程内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值