QT5开发及实例学习之七布局管理


前言


一、分割窗口QSplitter类

  创建一个简单的分割窗口,整个窗口由三个子窗口构成,各个子窗口之间的大小可随意拖拽改变;
代码如下(示例):

#include "mainwindow.h"			//头文件
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFont font("ZYSong18030", 12);		//指定显示字体
    a.setFont(font);
    //主分割窗口
    QSplitter *splitterMain = new QSplitter(Qt::Horizontal);	//(a)
    QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"), splitterMain);	//(b)

    textLeft->setAlignment(Qt::AlignCenter);					//(c)
    //右分割窗口
    QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);			//(d)
    splitterRight->setOpaqueResize(false);						//(e)
    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);

    splitterMain->setStretchFactor(1, 1);						//(f)
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

//    MainWindow w;
//    w.show();

    return a.exec();
}

(a)新建一个QSplitter类对象,作为主分割窗口,设定此分割窗口为水平分割。
(b)新建一个QTextEdit类对象,并将其插入主分割窗口中。
(c)设定TextEdit中文字对齐方式,常用对齐方式有:

  • Qt::AlignLeft:左对齐
  • Qt::AlignRight:右对齐
  • Qt::AlignCenter:文字居中(Qt::AlignHCenter为水平居中,Qt::AlignVCenter为垂直居中)。
  • Qt::AlignUp:文字与顶部对齐
  • Qt::AlignBottom:文字与底部对齐

(d)新建一个QSplitter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
(e)调用setOpaqueResize(bool)方法用于设定分割窗口的分割条在拖拽时是否为实时更新显示,若设为true则实时更新显示,若设为false则在拖拽时只显示一条灰色的粗浅线,在拖拽到位并释放鼠标后再显示分割条。默认为true。
(f)调用setStretchFactor()方法用于设定可伸缩控件,第一个参数用于指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第二个参数为大于0的值,表示此控件为可伸缩控件。

二、停靠窗口QDockWidget类

设置停靠窗口的一般流程如下:
(1)创建一个QDockWidget对象的停靠窗体;
(2)设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法;
(3)新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit;
(4)将控件插入停靠窗体,调用QDockWidget的setWidget()方法;
(5)使用addDockWidget()方法在MainWindow中加入此停靠窗体。

代码如下(示例):

#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(QObject::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, andfloated"));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea, dock);
}

(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类

实际应用中,堆栈窗体多与列表框QListWidget及下拉列表框QComboBox配合使用。
代码如下(示例):

stackdlg.h中添加:
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>

private:
    QListWidget *list;
    QStackedWidget *stack;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
    
stackdlg.cpp中添加:
#include "stackdlg.h"
#include <QHBoxLayout>

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(QObject::tr("StackedWidget"));
    list = new QListWidget(this);       //新建一个QListWidget控件对象
    //在新建的QListWidget控件中插入三个条目,作为选择项
    list->insertItem(0, QObject::tr("Window1"));
    list->insertItem(1, QObject::tr("Window2"));
    list->insertItem(2, QObject::tr("Window3"));
    //创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
    label1 = new QLabel(QObject::tr("WindowTest1"));
    label2 = new QLabel(QObject::tr("WindowTest2"));
    label3 = new QLabel(QObject::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)
}

(a)设定可伸缩控件,第一个参数用于指定设置的控件(序号从0起编号);第二个参数的值大于0则表示此控件为可伸缩控件。
(b)将QListWidget的currentRow()信号与堆栈窗体的setCurrentIndex()槽函数连接起来,实现按选择显示窗体。此处的堆栈窗体index按插入的顺序从0起依次排序,与QListWidget的条目排序相一致。

四、基本布局(QLayout)

Qt提供了QHBoxLayout类、QVBoxLayout类及QGridLayout类等的基本布局管理,分别是水平排列布局、垂直排列布局及网格排列布局。
各种布局的继承关系:

QLayout QBoxLayout QHBoxLayout QVBoxLayout QGridLayout

布局中常用的方法有addWidget()和addLayout()。
addWidget()方法用于加入需要布局的控件,方法原型如下:

void addWidget
(
	QWidget *widget,			//需要插入的控件对象
	int formRow,				//插入的行
	int fromColumn,				//插入的列
	int rowSpan,				//表示占用的行数
	int columnSpan,				//表示占用的列数
	Qt::Alignment alignment=0	//描述各个控件的对齐方式
)

addLayout()方法用于加入子布局,方法原型如下:

void addLayout
(
	QLayout *layout,			//表示需要插入的子布局对象
	int row,					//插入的起始行
	int column,					//插入的起始列
	int rowSpan,				//表示占用的行数
	int columnSpan,				//表示占用的列数
	Qt::Alignment alignment=0	//指定对齐方式
)

QHBoxLayout默认采取的是以自左向右的方式顺序排列插入控件或子布局,也可以通过调用setDirection()方法设定排列顺序(如layout->setDirection(QBoxLayout::RightToLeft));
QVBoxLayout默认采用的是以自上而下的方式顺序排列插入控件或子布局,也可以通过调用setDirection()方法设定排列顺序。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt5是一种跨平台的C++应用程序框架,可以用于开发各种类型的应用程序。qt5开发实例pdf是一种学习Qt5框架的材料,可以帮助开发人员更好地了解Qt5框架的基础知识和使用方法。 qt5开发实例pdf包含了Qt5应用程序开发的各种方面,从Qt5的基础概念到GUI和应用程序开发。在这个PDF中,你会学习如何使用Qt Creator,Qt中的Qt Widgets和QML等API来创建界面和应用程序。你也会学习如何使用事件和信号与槽机制来实现各种功能。此外,还会介绍Qt5中支持的媒体、网络、数据库、图像处理、WebSockets和本地文件系统等模块。 此外,qt5开发实例pdf也包含了一些实际的示例,例如创建一个简单的文本编译器,使用Qt5绘制二维图形以及在Qt5中使用SQLite数据库等。这些示例可以帮助开发人员更好地理解Qt5的应用和功能。 总之,qt5开发实例pdf可以帮助开发人员更加深入地学习Qt5框架,提供了一个全面而系统的介绍,使他们能够更加高效、灵活地使用Qt5开发应用程序。 ### 回答2: 《Qt5开发实例》是一本关于Qt5开发的书籍。Qt是一个跨平台的应用程序框架,它提供了一套友好的GUI和多媒体功能,使得开发人员可以快速创建高效的应用程序。 该书的作者是史荣华,他详细介绍了如何使用Qt5开发GUI应用程序,并提供了大量实例来帮助读者学习和掌握Qt的基本概念和技术。 该书分为四个部分,第一部分介绍了Qt的基础知识,包括Qt的安装和配置、Qt Creator的使用、Qt对象模型等。第二部分详细介绍了Qt的GUI编程,包括窗口、控件、布局、事件处理等。第三部分介绍了Qt的数据库编程,包括MySQL、SQLite等数据库的使用。第四部分是以实例为案例,讲解如何使用Qt实现一些常见的应用程序,例如多媒体播放器、电子邮件客户端、文本编辑器等。 总体来说,该书内容全面详实,适合初学者和有一定经验的开发人员阅读。对于想要学习Qt5开发的人来说,这本书是一本非常好的入门教材。 ### 回答3: QT5开发是一种面向对象的编程语言,它提供了一系列丰富的工具和功能,便于程序员进行开发工作。对于需要学习和了解QT5开发开发者来说,一本非常实用的工具是《QT5开发实例》PDF。 该PDF文档包含了关于QT5开发的详细介绍和实例,可以帮助开发者快速掌握这种编程语言。例如,它会介绍QT5开发的基础知识和概念,以及如何使用QT5创建GUI应用程序和窗口。 此外,该文档还包含各种实用的例子,例如如何使用QT5开发一个简单的计算器应用程序或一个涂鸦板应用程序。这些实例不仅可以让开发者更好地理解QT5的各种概念和工具,还可以帮助他们快速地构建自己的应用程序。 总的来说,《QT5开发实例》PDF是一个非常实用的工具,不仅可以帮助有经验的开发学习QT5开发,还可以帮助新手开发者入门。它清晰明了地讲解了QT5的工具和概念,并提供了各种实用的例子,使开发者可以快速学习和掌握这种编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值