zl程序教程

您现在的位置是:首页 >  工具

当前栏目

C++ Qt开发——元对象系统&布局管理器

QtC++amp对象系统开发 布局 管理器
2023-09-14 09:05:12 时间

元对象系统

Qt5元对象系统提供了对象间的通信机制(信号和槽)、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使αt能够更好地实现GUI图形用户界面编程。Qt5的元对象系统不支持C++模板,尽管该模板扩展了标准C++的功能。但是,元对象系统提供了模板无法提供的一些特性。Qt5元对象系统基于以下三个事实。

(1)基类 QObject:任何需要使用元对象系统功能的类必须继承自 QObject

(2) Q_OBJECT宏: Q OBJECT宏必须出现在类的私有声明区中,用于启动元对象的特性。

(3)元对象编译器( Meta-Object Compiler,moc):为 QObject子类实现元对象特性提供必要的代码实现。

布局管理器

在设计较复杂的GUI用户界面时,仅通过指定窗口部件的父子关系以期达到加载和排列窗口部件的方法是行不通的,最好的办法是使用Qt提供的布局管理器。

QGridLayout *mainLayout=new QGridLayout (this); //a
mainLayout->addwidget(label1,0, 0);             //b
mainLayout->addwidget(lineEdit, 0,1);
mainLayout->addwidget(label2, 1, 0);
mainLayout->addwidget(button, 1, 1);
setLayout(mainLayout);                          //c

CSDN QT开发文章推荐:Qt开发必备技术栈学习路线和资料

其中,

QGridLayout *mainLayout= new QGridLayout(this):创建一个网格布局管理器对象mainLayout,并用this指出父窗口。

mainLayout-> addwidget():分别将控件对象 label1, lineEdit、label2和 button放置在布局管理器中,还可以在创建布局管理器对象时不必指明父窗口。

QWidget::setLayout(…)}:将布局管理器添加到对应的窗口部件对象中。因为这里的主窗口就是父窗口,所以直接调用 setLayout(main Layou)即可。

在Qt Creater的这个位置,有四种布局模式。

将第一个Vertical layout拖入编辑器,再拖入四个button。效果如下:

 

其他的不再赘述。用法一样。

点击布局的框架,layout的参数在下面可以调节。

layoutName——布局名称

layoutleftmargin——右边的边距 top、right、bottom分别是顶,左,底部。

layoutspacing——调节布局里面的元素间的距离

layoutstretch——是调整控件比例的

例如: Layout里面放了三个控件,layoutstretch里面的初始值为0,0,0,意思是三个控件的比例是1:1:1;放两个控件,layoutstretch里面的值为2,3,意思是三个控件的比例是2:3。

layoutsizeconstraint——

设置为QLayout.SetDefaultConstraint时,最大没有限制,当然是窗口本身没有设置尺寸策略的情况下。

设置为QLayout.SetNoConstraint时,窗口可以无限放大和缩小;

设置为QLayout.SetMinimumSize时,与设置为QLayout.SetDefaultConstraint时效果相同,且似乎不受窗口大小策略的影响;

设置为QLayout.SetMaximumSize时,可以无限放大(应该是最大尺寸过大导致感觉不到),在窗口未设置大小策略时可以无限小,但当窗口设置有大小策略时,会受到大小策略的影响;

设置为SetFixedSize时,窗口大小固定不变,且似乎不受大小策略影响。

设置为SetNoConstraint时,窗口大小可以随意调节,但受大小策略的影响。

本文福利, 免费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓