网站建设QQ刷赞,西安网站建设技术,浙江省火电建设公司网站,珠宝店网站项目网页设计1. Qt 控件的父子继承关系
在 Qt 中#xff0c;继承自 QWidget 的类#xff0c;通常会在构造函数中接收一个 parent 参数。
这个参数用于指定当前空间的父控件#xff0c;从而建立控件间的父子关系。
当一个控件被设置为另一控件的子控件时#xff0c;它会自动成为该父控…1. Qt 控件的父子继承关系
在 Qt 中继承自 QWidget 的类通常会在构造函数中接收一个 parent 参数。
这个参数用于指定当前空间的父控件从而建立控件间的父子关系。
当一个控件被设置为另一控件的子控件时它会自动成为该父控件的一部分且具备以下特性 子控件会随着父控件一起显示或隐藏 子控件会被包含在父控件的几何布局中 当父控件被删除时所有的子控件会被自动删除防止内存泄漏。
// .h
class SessionFriendArea : public QScrollArea
{Q_OBJECT
public:QWidget* container;
}// .cpp
SessionFriendArea::SessionFriendArea(QWidget *parent): QScrollArea{parent}
{container new QWidget();this-setWidget(container);
}在 SessionFriendItem 的构造函数中 parent 被传递给 QScrollArea 的构造函数 —— 让 QScrollArea 成为父控件的一部分从而正确地管理其生命周期和位置。
在构造函数体中创建 container 并设置为 this 的子控件即 QScrollArea 的子控件
container 会随 QScrollArea 的 显示/隐藏 而 显示/隐藏
container 的生命周期与 QScrollArea 绑定当 QScrollArea 被销毁时container 也会被自动销毁。
2. QWidget 和 QLayout
在 Qt 中QWidget 和 QLayout 之间的关系是紧密且互补的。
理解它们的关系对构建复杂的用户界面统至关重要。
2.1 QWidget 简介
QWidget 是所有界面对象的基类代表了一个可以显示和交互的窗口部件控件如按钮、标签、窗口。
每个 QWidget 可以有自己的几何属性位置、大小、样式、事件处理机制等。
2.2 QLayout 简介
QLayout 是一个抽象基类用于管理一组 QWidget 的布局。
它的主要作用是自动调整这些控件的位置和大小以便它们能适应不同的窗口大小和分辨率。
常见的布局管理器QVBoxLayout 、QHBoxLayout 、QGridLayout 。
2.3 QWidget 包含 QLayout
可以通过 QWidget::setLayout(QLayout*) 方法将一个布局管理器设置给 QWidget
也可以通过 QWidget::Layout() 方法获取 QWidget 内的布局。
QWidget* widget new QWidget();
QVBoxLayout* layout new QVBoxLayout();QPushButton* btn1 new QPushButton();
btn1-setText(QString(按钮1));QPushButton* btn2 new QPushButton();
btn2-setText(QString(按钮2));layout-addWidget(btn1);
layout-addWidget(btn2);widget-setLayout(layout); // 设置布局当 QWidget 被赋予一个布局时该布局会自动管理所有添加到该该布局中的子控件的位置和大小。
2.4 QLayout 包含 QWidget
可以通过 QLayout::addWidget(QWidget*) 将控件添加到布局中
也可以通过 QLayout::addLayout() 方法将一个布局嵌套在另一个布局中从而实现复杂的界面结构。
布局管理器会根据其规则垂直排列、水平排列、网格排列等自动调整这些控件的位置和大小。
int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget* widget new QWidget();QVBoxLayout* mainlayout new QVBoxLayout();QHBoxLayout* sublayout new QHBoxLayout();QPushButton* btn1 new QPushButton(按钮1);QPushButton* btn2 new QPushButton(按钮2);QPushButton* btn3 new QPushButton(按钮3);sublayout-addWidget(btn2);sublayout-addWidget(btn3);mainlayout-addWidget(btn1);mainlayout-addLayout(sublayout);widget-setLayout(mainlayout);widget-show();return a.exec();
}3. Qt 控制窗口大小方法
setFixedSize() 设置控件的固定高度和宽度 —— 使得控件的大小不会随窗口或布局管理器的变化而改变。
QPushButton* btn new QPushButton();
btn-setFixedSize(QSize(50, 50));
setFixedWidth() 、setFixedHeight() 分别设置控件的固定宽度和高度。setMinimunSize() 、setMaximunSize() 分别设置控件的最小尺寸和最大尺寸。setSizePolicy() 设置控件的尺寸策略定义了控件如何响应布局管理器的要求及窗口大小的变化.
Fixed 、Preferred 、Expanding tips 对于 QPushButton setFixedSize() 的作用是设置控件的大小setIconSize() 的作用是设置控件图标的大小在 setIcon() 后。大多数情况下调用 setFixedSize() 等方法后无需额外调用 setSizePolicy() 。 4. QScrollArea
QScrollArea 是一个用于显示可滚动内容的容器控件。
它允许用户通过滚动条查看超出窗口可视范围的内容。
setWidgetResizable(bool resizable) 决定是否自动调整内部小部件的大小以适应窗口大小。verticalScrollBar() 返回与 QScrollArea 关联的垂直方向上的滚动条。horizontalScrollBar() 返回与 QScrollArea 关联的水平方向上的滚动条。