[学习][笔记] qt5 从入门到入坟:<五>布局管理器

简介: [学习][笔记] qt5 从入门到入坟:<五>布局管理器

绝对定位和布局定位

Qt 提供了两种组件定位机制:绝对定位和布局定位。

绝对定位

给出这个组件的绝对坐标以及长宽值。

带来问题: 如果用户改变了窗口大小,比如点击最大化按钮或者使用鼠标拖动窗口边缘,采用绝对定位的组件是不会有任何响应的。

所以另一个布局定位就是为了解决这个问题的

布局

你只要把组件放入某一种布局,布局由专门的布局管理器进行管理。当需要调整大小或者位置的时候,Qt 使用对应的布局管理器进行调整。

以下是使用QHBoxLayout布局的代码

// !!! Qt 5
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget window;
    window.setWindowTitle("Enter your age");
    QSpinBox *spinBox = new QSpinBox(&window);
    QSlider *slider = new QSlider(Qt::Horizontal, &window);
    spinBox->setRange(0, 130);
    slider->setRange(0, 130);
    QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);
    void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;
    QObject::connect(spinBox, spinBoxSignal, slider, &QSlider::setValue);
    spinBox->setValue(35);
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(spinBox);
    layout->addWidget(slider);
    window.setLayout(layout);
    window.show();
    return app.exec();
}

注意以上:

void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;

因为valueChanged有重载

Q_SIGNALS:
    void valueChanged(int);
    void valueChanged(const QString &);

作为signal 会让编译器不知道使用哪一个故加了一步显示使用 void valueChanged(int);

解释代码:

QSpinBox就是只能输入数字的输入框,并且带有上下箭头的步进按钮。QSlider则是带有滑块的滑竿。我们可以从上面的截图中清楚地辨别出这两个组件。当我们创建了这两个组件的实例之后,我们使用setRange()函数设置其范围。既然我们的窗口标题是“Enter

your age(输入你的年龄)”,那么把 range(范围)设置为 0 到 130 应该足够了。

我们创建了一个QHBoxLayout对象。显然,这就是一个布局管理器。然后将这两个组件都添加到这个布局管理器,并且把该布局管理器设置为窗口的布局管理器。这些代码看起来都是顺理成章的,应该很容易明白。并且,布局管理器很聪明地做出了正确的行为:保持QSpinBox宽度不变,自动拉伸QSlider的宽度。

Qt 提供了几种布局管理器供我们选择:

QHBoxLayout:按照水平方向从左到右布局;

QVBoxLayout:按照竖直方向从上到下布局;

QGridLayout:在一个网格中进行布局,类似于 HTML 的 table;

QFormLayout:按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框),类似 HTML 的 form;

QStackedLayout:层叠的布局,允许我们将几个组件按照 Z 轴方向堆叠,可以形成向导那种一页一页的效果。

布局根据使用再作详细介绍

QHBoxLayout

在水平的方向上排列控件 左右排列 H代表horizontal 水平的

QVBoxLayout

QVBoxLayout:按照竖直方向从上到下布局, V代表vertical 垂直的

QGridLayout

在一个网格中进行布局,类似于 HTML 的 table;Grid网格意思

QFormLayout

按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框),类似 HTML 的 form;

QStackedLayout

层叠的布局,允许我们将几个组件按照 Z 轴方向堆叠,可以形成向导那种一页一页的效果。

Qt 学习之路 2(11):布局管理器


相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
294 4
|
28天前
|
XML 开发框架 JSON
【Qt】Qt入门
【Qt】Qt入门
|
6天前
|
数据安全/隐私保护
Qt布局(登录窗口实现)
Qt布局(登录窗口实现)
12 4
|
4天前
|
XML 存储 JSON
技术笔记:Qt基础之配置文件(QSettings)
技术笔记:Qt基础之配置文件(QSettings)
|
24天前
|
计算机视觉
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
16 0
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
|
4天前
|
调度
技术笔记:QT之深入理解QThread
技术笔记:QT之深入理解QThread
|
2月前
|
开发者
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
|
18天前
QT布局管理器
QT布局管理器
|
2月前
|
编译器 C语言 开发者
Qt Quick 常见控件与子控件布局规则
Qt Quick 常见控件与子控件布局规则
58 1