QT布局管理学习笔记

1、QSplittle类的使用
用于分割窗口

#include "lqsplitter.h"
#include <QApplication>
#include<Qsplitter>
#include<QTextEdit>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont Main_font("ZYSong18030",12);
    a.setFont(Main_font); //设置窗口的字体
    QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0); //创建一个分割类
    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"), splitterMain);//创建一个文本编辑,父类是splitterMain
    textLeft->setAlignment(Qt::AlignCenter);//文本以中心对齐

    QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);//创建一个右边的分割类,父类指向splitterMain
    splitterRight->setOpaqueResize(false);						//设置窗口在进行拖曳的时候,分割条是否要实时更新,这里不进行实时更新
    QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"), splitterRight);//右边创建一个文本编辑类1
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"), splitterRight);//右边创建一个文本编辑类2
    textBottom->setAlignment(Qt::AlignCenter);

    /*
     * 第一个参数控件的序号,第二个参数表示拉伸系数,
     * 这个语句表示在拉伸的时候,左边的窗口不变,(注:因为左边的窗口的序号是0)
     *右边的窗口进行拉伸
     */

    splitterMain->setStretchFactor(1,1);

    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();


    //LQsplitter w;
    //w.show();

    return a.exec();
}

在这里插入图片描述

知识点:
1.1)、设置字体
QFont Main_font(“ZYSong18030”,12);
a.setFont(Main_font); //设置窗口的字体

1.2)、设置文本的对齐方式
textLeft->setAlignment(Qt::AlignCenter);//文本以中心对齐
参数:
QT::AlignLeft:左对齐
QT::AlignRight:右对齐
QT::AlignCenter:文字居中对齐
QT::AlignUp 文字与顶端对齐
Qt::AlignBottom 文字与底部对齐

1.3) QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0); //创建一个分割类
参数1:
Qt::Horizontal 水平布局
Qt::Vertical 垂直布局
参数2:
指定父指针

1.4)splitterRight->setOpaqueResize(bool)
设置窗口在进行拖曳的时候,分割条是否要实时更新,1:实时更新。

1.5).
QObject::tr(“Bottom Widget”):被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用。

1.6)splitterMain->setStretchFactor(1,1);
/*
* 第一个参数控件的序号,第二个参数表示拉伸系数,
* 这个语句表示在拉伸的时候,左边的窗口不变,(注:因为左边的窗口的序号是0)
*右边的窗口进行拉伸
*/


2、停靠窗口QDockWidget

#include "dockwindows.h"
#include<QTextEdit>
#include<QDockWidget>
DockWindows::DockWindows(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("DockWindows"));	//设置主窗口的标题栏文字
    QTextEdit *te=new QTextEdit(this);	//定义一个QTextEdit对象作为主窗口
    te->setText(tr("Main Window"));
    te->setAlignment(Qt::AlignCenter);
    setCentralWidget(te);          		//将此编辑框设为主窗口的中央窗体
    //停靠窗口1
    QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
    //可移动
    dock->setFeatures(QDockWidget::DockWidgetMovable);	//(a)
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);														//(b)
    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);
    //停靠窗口2
    dock=new QDockWidget(tr("DockWindow2"),this);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); 										//可关闭、可浮动
    QTextEdit *te2 =new QTextEdit();
    te2->setText(tr("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed"));
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //停靠窗口3
    dock=new QDockWidget(tr("DockWindow3"),this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures);   //全部特性
    QTextEdit *te3 =new QTextEdit();
    te3->setText(tr("Window3,The dock widget can be closed, moved, and floated"));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);
}

在这里插入图片描述

2.1)setCentralWidget(QWidget *widget)
用来设置主体窗口,在这里如果不设置的话,该界面会被覆盖掉

2.2)QDockWidget::setFeatures(DockWidgetFeatures features)
QDockWidget::DockWidgetMovable 停靠窗体可移动
QDockWidget::DockWidgetClosable 停靠窗体可关闭
QDockWidget::DockWidgetFloatable 停靠窗体可移动
QDockWidget::ALLDockWidgetFeatures 停靠窗体可移动
QDockWidget::NoDockWidgetFeatures 停靠窗体可移动

2.3)void QDockWidget::setWidget(QWidget *widget)
在停靠窗口哪里创建一个控件

2.4)QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
第一个参数:设定窗口的停靠区域
Qt::RightDockWidgetArea – 主窗口右边
Qt::LeftDockWidgetArea – 主窗口左边
Qt::TopDockWidgetArea – 主窗口顶部
Qt::BottomDockWidgetArea – 主窗口底部
Qt::AllDockWidgetArea – 主窗口任意位置
Qt::NoDockWidgetArea – 只可停靠在插入出

3、堆栈窗体QStackedWidget类

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget"));
    list =new QListWidget(this);	//新建一个QListWidget控件对象
    //在新建的QListWidget控件中插入三个条目,作为选择项
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

    //创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
    label1 =new QLabel(tr("WindowTest1"));
    label2 =new QLabel(tr("WindowTest2"));
    label3 =new QLabel(tr("WindowTest3"));
    stack =new QStackedWidget(this);
    //新建一个QStackedWidget堆栈窗体对象
    //将创建的三个QLabel标签控件依次插入堆栈窗体中
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);
    QHBoxLayout *mainLayout =new QHBoxLayout(this);
                                    //对整个对话框进行布局
    mainLayout->setMargin(5);		//设定对话框(或窗体)的边距为5
    mainLayout->setSpacing(5);		//设定各个控件之间的间距为5
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,1);		//(a)
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//(b)
}

在这里插入图片描述
3.1)void QListWidget::insertItem(int row, const QString &label)
row :控件的序号,QString &label 控件的ID

3.2)int QStackedWidget::addWidget(QWidget *widget)
往栈窗口中添加窗口

3.3)QHBoxLayout用于水平布局(注QVBoxLayout用于垂直布局)

void QHBoxLayout::setMargin(int margin) 设置对话框的边距

void QHBoxLayout::setSpacing(int spacing) 设置空间间的距离

3.4)void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

QWidget *widget 插入的控件窗口
int stretch 拉伸系数
Qt::Alignment alignment 对齐方式


4、常见布局
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值