Qt 提供了几种布局管理器供我们选择:
QHBoxLayout:按照水平方向从左到右布局;
QVBoxLayout:按照竖直方向从上到下布局;
QGridLayout:在一个网格中进行布局,类似于 HTML 的 table;
QFormLayout:按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框),类似 HTML 的 form;
QStackedLayout:层叠的布局,允许我们将几个组件按照 Z 轴方向堆叠,可以形成向导那种一页一页的效果。
#include <QApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QSpinBox>
#include <QWidget>
#include <QSlider>
int main(int argc, char *argv[])
{
QApplication a(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);
//上行代码如果改成 QObject::connect(spinBox,&QSpinBox::valueChanged,slider,&QSlider::setValue)就会报错
//这是因为QSpinBox::valueChanged是个重载函数分别为void valueChanged(int)和void valueChanged(const QString &)
//当使用&QSpinBox::valueChanged取函数指针时,编译器就不知道取哪一个函数
spinBox->setValue(35);
//创建一个布局管理器,将2个组件都添加到这个布局管理器,并把其设置成窗口的布局管理器
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window.setLayout(layout);
window.show();
return a.exec();
}