网站首页 > 博客文章 正文
QLayoutItem
一、描述
QLayoutItem 类提供了一个 QLayout 操作的抽象项。
二、函数成员
1、void setAlignment(Qt::Alignment alignment) / Qt::Alignment alignment()
设置项目的对齐方式。
除了为布局提供空白空间的 QSpacerItem 之外,所有继承 QLayoutItem 的公共 Qt 类都支持项对齐。
2、QSizePolicy::ControlTypes controlTypes()
返回布局项的控件类型。对于一个 QWidgetItem,控件类型来自widget的大小策略;对于 QLayoutItem,控件类型派生自布局的内容。
enum QSizePolicy::ControlType:此枚举在布局交互方面指定了不同类型的小部件:
- QSizePolicy::DefaultType:默认类型,没有指定时。
- QSizePolicy::ButtonBox:QDialogButtonBox 实例。
- QSizePolicy::CheckBox:QCheckBox 实例。
- QSizePolicy::ComboBox:QComboBox 实例。
- QSizePolicy::Frame:QFrame 实例。
- QSizePolicy::GroupBox:QGroupBox 实例。
- QSizePolicy::Label: QLabel 实例。
- QSizePolicy::Line:具有 QFrame::HLine 或 QFrame::VLine 的 QFrame 实例。
- QSizePolicy::LineEdit:QLineEdit 实例。
- QSizePolicy::PushButton:QPushButton 实例。
- QSizePolicy::RadioButton:QRadioButton 实例。
- QSizePolicy::Slider:QAbstractSlider 实例。
- QSizePolicy::SpinBox:QAbstractSpinBox 实例。
- QSizePolicy::TabWidget:QTabWidget 实例。
- QSizePolicy::ToolButton:QToolButton 实例。
3、【纯虚函数】Qt::Orientations expandingDirections()
返回此布局项是否可以使用比 sizeHint() 更多的空间。Qt::Vertical 或 Qt::Horizontal 的值意味着它只想在一维上增长,而 Qt::Vertical | Qt::Horizontal 意味着它想要在两个维度上增长。
4、QRect geometry()
返回此布局项覆盖的矩形。
【纯虚函数】void setGeometry(const QRect &r)
在子类中实现以设置项目的几何位置。
5、bool hasHeightForWidth()
布局的首选高度是否取决于其宽度。默认实现返回 false。
6、int heightForWidth(int w)
给定宽度,返回此布局项的首选高度。
在支持高度宽度的布局管理器中重新实现此功能。一个典型的实现将如下所示:
int MyLayout::heightForWidth(int w) const
{
if (cache_dirty || cached_width != w)
{
MyLayout *that = const_cast<MyLayout *>(this);
int h = calculateHeightForWidth(w);
that->cached_hfw = h;
return h;
}
return cached_hfw;
}
重新实现时强烈建议使用缓存,否则布局将需要指数级的时间。
7、void invalidate()
使此布局项中的任何缓存信息无效。
8、【纯虚函数】bool isEmpty()
在子类中实现以返回此项是否为空,即它是否包含任何小部件。
9、QLayout * layout()
如果此项为QLayout,则作为QLayout返回;否则返回 nullptr。
QSpacerItem * spacerItem()
如果此项为QSpacerItem,则作为QSpacerItem返回; 否则返回 nullptr。
QWidget * widget()
如果此项目管理QWidget,则返回该小部件。否则,返回 nullptr。
10、【纯虚函数】QSize maximumSize() / 【纯虚函数】QSize minimumSize()
在子类中实现以返回此项的最大 / 最小大小。
11、int minimumHeightForWidth(int w)
返回此小部件对于给定宽度 w 所需的最小高度。默认实现只返回 heightForWidth(w)。
12、【纯虚函数】QSize sizeHint()
在子类中实现以返回此项的首选大小。
QSizePolicy
一、描述
QSizePolicy 类是布局属性,描述了水平和垂直大小调整策略。
QWidget 的大小策略是其调整大小意愿的表达,并影响布局引擎如何处理小部件。每个小部件都返回一个 QSizePolicy,描述其布局时首选的水平和垂直大小调整策略。
QSizePolicy包含两个独立的QSizePolicy::Policy值和两个拉伸因子;一个描述小部件的水平尺寸策略,另一个描述小部件的垂直尺寸策略。它还包含一个标志,用于指示其首选大小的高度和宽度是否相关。
二、类型成员
1、QSizePolicy::ControlType:设置与应用大小策略的小部件关联的控件类型,一些样式(特别是QMacStyle)使用它在小部件之间插入适当的间距。
- QSizePolicy::DefaultType:默认类型,没有指定时。
- QSizePolicy::ButtonBox:QDialogButtonBox 实例。
- QSizePolicy::CheckBox:QCheckBox 实例。
- QSizePolicy::ComboBox:QComboBox 实例。
- QSizePolicy::Frame:QFrame 实例。
- QSizePolicy::GroupBox:QGroupBox 实例。
- QSizePolicy::Label:QLabel 实例。
- QSizePolicy::Line:具有 QFrame::HLine 或 QFrame::VLine 的 QFrame 实例。
- QSizePolicy::LineEdit:QLineEdit 实例。
- QSizePolicy::PushButton:QPushButton 实例。
- QSizePolicy::RadioButton:QRadioButton 实例。
- QSizePolicy::Slider:QAbstractSlider 实例。
- QSizePolicy::SpinBox:QAbstractSpinBox 实例。
- QSizePolicy::TabWidget:QTabWidget 实例。
- QSizePolicy::ToolButton:QToolButton 实例。
2、QSizePolicy::Policy。策略。描述了构造QSizePolicy时使用的各种尺寸调整类型。
- Fixed:size固定为QWidget::sizeHint()。
- Minimum:size不能小于 sizeHint() 提供的大小。
- Maximum:size不能大于 sizeHint() 提供的大小。
- Preferred:最佳size为 sizeHint()。
- Expanding:sizeHint()为推荐的size,但尽可能地获得更大的空间。
- MinimumExpanding:sizeHint()是最小的size,但尽可能地获得更大的空间。
- Ignored:sizeHint()被忽略。小部件将获得尽可能多的空间。
3、QSizePolicy::PolicyFlag。策略标志,这些标志组成了策略值。
- GrowFlag:如果需要,小部件可以扩展到超出其sizeHint()。
- ExpandFlag:小部件应该获得尽可能多的空间。
- ShrinkFlag:如果有必要,小部件可以缩小到其sizeHint()以下。
- IgnoreFlag:小部件的sizeHint()被忽略。小部件将获得尽可能多的空间。
三、成员函数
1、Qt::Orientations expandingDirections()
- 返回值表示是否可以使用比QWidget::sizeHint()指示的更多的空间。
- 返回Qt::Horizontal或Qt::Vertical值表示小部件可以水平或垂直拓展。
- 返回Qt::Horizontal | Qt::Vertical表示它可以在两个维度上增长。
2、bool hasHeightForWidth()
小部件的首选高度是否取决于其宽度。
3、bool hasWidthForHeight()
小部件的宽度是否取决于其高度。
4、QSizePolicy::Policy horizontalPolicy() / verticalPolicy()
返回水平/垂直策略。
5、int horizontalStretch() / verticalStretch()
返回大小策略的水平/垂直拉伸因子。
6、bool retainSizeWhenHidden()
返回小部件隐藏时布局是否应保留其大小。默认为false。
void setRetainSizeWhenHidden(bool retainSize)
设置布局在隐藏时是否应保留小部件的大小。
7、void setControlType(QSizePolicy::ControlType type)
设置应用小部件的控件类型。
8、void setHeightForWidth(bool dependent) / setWidthForHeight(bool dependent)
设置小部件的首选高度/宽度是否取决于其宽度/高度。
9、void setHorizontalPolicy / setVerticalPolicy(QSizePolicy::Policy policy)
设置水平/垂直方向策略。
10、void setHorizontalStretch / setVerticalStretch(int stretchFactor)
设置大小策略的水平拉伸因子。必须在[0~255]范围内。
比如当两个窗口小部件在水平布局中彼此相邻时,将左侧窗口小部件的水平拉伸系数设置为2,将右侧窗口小部件的系数设置为1,将确保左侧窗口小部件的大小始终是右侧窗口小部件的两倍。
11、void transpose()
交换水平/垂直大小策略。
QSizePolicy transposed()
返回交换了水平和垂直策略和拉伸的大小策略的对象。
12、QVariant operator QVariant()
返回存储此QSizePolicy的QVariant。
QSizePolicy sp = this->sizePolicy();
qDebug()<<static_cast<QVariant>(sp);
免费学习C++ Qt开发教程视频,点击下面链接免费报名领取视频学习资料
C/C++项目实战/Qt5/C语言/c++/数据库/OpenCV/MFC/QT项目-学习视频教程-腾讯课堂
QLayout
一、描述
QLayout 类是布局管理器的基类,是 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout 继承的抽象基类。
要自定义布局管理器,须实现函数:
- addItem()
- sizeHint()
- setGeometry()
- itemAt()
- takeAt()
还应该实现 minimumSize() 以确保如果空间太少,布局不会调整为零大小。要支持高度取决于宽度的子项,须实现 hasHeightForWidth() 和 heightForWidth()。
删除布局管理器后,布局管理(几何形状管理)将停止。
二、类型成员
1、enum QLayout::SizeConstraint:布局的调整大小模式。
- SetDefaultConstraint:小部件的最小尺寸设置为 minimumSize(),除非小部件已经具有最小尺寸。
- SetFixedSize:部件的尺寸设置为 sizeHint(),无法调整大小。
- SetMinimumSize:部件的最小尺寸设置为 minimumSize(),它不能更小。
- SetMaximumSize:部件的最大尺寸设置为 maximumSize(),它不能更大。
- SetMinAndMaxSize:部件的最小尺寸设置为 minimumSize(),其最大尺寸设置为 maximumSize()。
- SetNoConstraint:小部件不受约束。
三、属性成员
1、sizeConstraint : SizeConstraint
布局的调整大小模式。默认模式是 SetDefaultConstraint。
2、spacing : int
布局内小部件之间的间距。
如果没有显式设置值,则布局的间距继承自父布局,或者继承自父窗口小部件的样式设置。
对于 QGridLayout 和 QFormLayout,可以使用 setHorizontalSpacing() 和 setVerticalSpacing() 设置不同的水平和垂直间距。 在这种情况下,spacing() 返回 -1。
四、成员函数
1、QLayout(QWidget *parent = nullptr)
构造一个新的顶级 QLayout。
布局直接设置为父级的顶级布局。一个小部件只能有一个顶级布局。它由 QWidget::layout() 返回。
如果 parent 为 nullptr,则必须将此布局插入另一个布局,或使用 QWidget::setLayout() 将其设置为小部件的布局。
2、bool activate()
如有必要,重做 parentWidget() 的布局。
通常不需要调用它,因为它会在最合适的时间自动调用。如果布局已重做,则返回 true。
3、void addChildLayout(QLayout *l)
从子类中的 addLayout() 或 insertLayout() 函数调用此函数,以将布局 l 添加为子布局。
唯一需要直接调用它的场景是实现支持嵌套布局的自定义布局。
4、void addChildWidget(QWidget *w)
从子类中的 addWidget() 函数调用此函数,以将 w 添加为布局的托管小部件。
如果 w 已经由布局管理,则此函数将发出警告并从该布局中删除 w。 因此,必须在将 w 添加到布局的数据结构之前调用此函数。
5、【纯虚函数】void addItem(QLayoutItem*item)
在子类中实现以添加项目。如何添加它是特定于每个子类的。
此函数通常不会在应用程序代码中调用,要将小部件添加到布局,使用 addWidget() 函数;要添加子布局,使用相关 QLayout 子类提供的 addLayout() 函数。
项目的所有权转移到布局,布局负责删除它。
6、void addWidget(QWidget *w)
以特定于布局的方式将小部件 w 添加到此布局。
7、QRect alignmentRect(const QRect &r)
返回当此布局的几何设置为 r 时应覆盖的矩形,前提是此布局支持 setAlignment()。
8、【static】QSize closestAcceptableSize(const QWidget *widget, const QSize &size)
返回满足小部件所有尺寸约束的尺寸。
9、QMargins contentsMargins()
返回布局周围使用的边距。默认使用样式提供的值。
在大多数平台上,所有方向的默认边距都是 11 像素。
void getContentsMargins(int *left, int *top, int *right, int *bottom)
对于不是 nullptr 的 left、top、right 和 bottom 中的每一个,存储指针所指位置中指定的边距大小。
void setContentsMargins(int left, int top, int right, int bottom)
void setContentsMargins(const QMargins &margins)
设置要在布局周围使用的边距。默认使用样式提供的值。
在大多数平台上,所有方向的边距都是 11 像素。
- QStyle::PM_LayoutLeftMargin:QLayout 的默认左边距。
- QStyle::PM_LayoutTopMargin:QLayout 的默认上边距。
- QStyle::PM_LayoutRightMargin:QLayout 的默认右边距。
- QStyle::PM_LayoutBottomMargin:QLayout 的默认下边距。
- QStyle::PM_LayoutHorizontalSpacing:QLayout 的默认水平间距。
- QStyle::PM_LayoutVerticalSpacing:QLayout 的默认垂直间距。
void unsetContentsMargins()
取消设置布局周围的任何用户定义的边距。布局将使用样式提供的默认值。
10、QRect contentsRect()
返回布局的 geometry() 矩形,且考虑内容边距。
11、【纯虚函数】int count()
返回布局中的项目数。
12、int indexOf(const QWidget *widget)
在此布局中搜索小部件(不包括子布局)。返回小部件的索引,如果未找到,则返回 -1。
13、int indexOf(const QLayoutItem *layoutItem)
在此布局中搜索布局项 layoutItem(不包括子布局)。返回 layoutItem 的索引,如果未找到 ,则返回 -1。
14、bool isEnabled()
是否启用了布局。
void setEnabled(bool enable)
设置是否禁用布局。
启用的布局会根据变化动态调整;禁用的布局就像它不存在一样(没有了布局,所有控件堆叠在一起)。
15、【纯虚函数】QLayoutItem * itemAt(int index)
必须在子类中实现以返回索引处的布局项。如果没有这样的项目,该函数必须返回 nullptr。项目从 0 开始连续编号。如果一个项目被删除,其他项目将重新编号。
此函数可用于迭代布局。以下代码将为小部件布局结构中的每个布局项绘制一个矩形:
static void paintLayout(QPainter *painter, QLayoutItem *item)
{
QLayout *layout = item->layout();
if (layout) {
for (int i = 0; i < layout->count(); ++i)
paintLayout(painter, layout->itemAt(i));
}
painter->drawRect(item->geometry());
}
void MyWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
if (layout())
paintLayout(&painter, layout());
}
16、void setMenuBar(QWidget *widget) / QWidget * menuBar()
通知几何管理器将widget放置在 parentWidget() 的顶部,在 QWidget::contentsMargins() 之外(即widget不受Margins设置的影响)。所有子小部件都放置在菜单栏的底部边缘下方。
#include <QApplication>
#include <QFormLayout>
#include <QLineEdit>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFormLayout * layout = new QFormLayout;
layout->addRow("label1",new QLineEdit);
layout->addRow("label2",new QLineEdit);
layout->setMenuBar(new QLabel ("我是菜单栏"));
QWidget w;
w.setLayout(layout);
w.show();
return a.exec();
}
17、QWidget * parentWidget()
返回此布局的父小部件,如果此布局未安装在任何小部件上,则返回 nullptr。
如果布局是子布局,则此函数返回父布局的父窗口小部件。
上面16的例子:
qDebug()<<&w<<layout->parent()<<layout->parentWidget();
void update()
更新 parentWidget() 的布局。通常不需要调用它,因为它会在最合适的时间自动调用。
18、void removeItem(QLayoutItem *item)
从布局中移除布局项。调用者有责任删除该项目。
19、void removeWidget(QWidget *widget)
从布局中移除widget。在此调用之后,调用者有责任管理 widget。
20、QLayoutItem * replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)
搜索小部件 from,如果找到则将其替换为小部件 to 。从成功返回包含小部件的布局项。否则返回 nullptr。
如果 options 包含 Qt::FindChildrenRecursively(默认),则搜索子布局以进行替换。选项中的任何其他标志都将被忽略。
返回的布局项不再归布局所有,应该删除或插入到另一个布局中。from 不再由布局管理,可能需要删除或隐藏。from 的父级保持不变。
此功能适用于内置 Qt 布局,但可能不适用于自定义布局。
enum Qt::FindChildOption:
Qt::FindDirectChildrenOnly:查找对象的直接子项。
Qt::FindChildrenRecursively:查找对象的所有孩子(递归搜索)。
21、bool setAlignment(QWidget *w, Qt::Alignment alignment)
bool setAlignment(QLayout *l, Qt::Alignment alignment)
设置对齐方式。如果在此布局中找到 w,则返回 true(不包括子布局), 否则返回false。
22、【纯虚函数】QLayoutItem * takeAt(int index)
必须在子类中实现以从布局中删除索引处的布局项目,并返回该项目。如果没有这样的项目,该函数必须什么都不做并返回nullptr。项目从0开始连续编号。如果一个项目被删除,其他项目将重新编号。
以下代码片段显示了从布局中删除所有项目的安全方法:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr) {
...
delete child->widget(); // delete the widget
delete child; // delete the layout item
}
免费学习C++ Qt开发教程视频,点击下面链接免费报名领取视频学习资料
C/C++项目实战/Qt5/C语言/c++/数据库/OpenCV/MFC/QT项目-学习视频教程-腾讯课堂
原文链接:https://blog.csdn.net/kenfan1647/article/details/122658766
猜你喜欢
- 2024-10-24 Qt Examples——QSlider(qt qcompleter)
- 2024-10-24 正点原子I.MX6U嵌入式Qt开发指南:第七章《Qt控件 2》
- 2024-10-24 销售订单管理,Excel表格模板演示
- 2024-10-24 抓大放小,瞅瞅 Qt 的几个基础模块
- 2024-10-24 WPF --- 如何重写WPF原生控件样式?
- 2024-10-24 Python入坑系列-pyside6桌面编程之border边框
- 2024-10-24 1.3 MyFirstWidget代码讲解及实用编程技巧分享
- 2024-10-24 C#知识|.Net控件二次封装之ComboBox下拉框
- 2024-10-24 在WPF 中想要在表格的同一列上显示多个表头
- 2024-10-24 Qt模型视图结构_代理(犀牛缩放视图后看不见模型了)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)