在 Qt 里,addWidget
是布局类(如 QVBoxLayout
、QHBoxLayout
、QGridLayout
等)用于添加窗口部件的重要方法,不同布局类的 addWidget
方法参数有所差异,下面为你详细介绍:
1. QVBoxLayout
和 QHBoxLayout
QVBoxLayout
用于垂直排列子部件,QHBoxLayout
用于水平排列子部件,它们的 addWidget
方法主要有以下两种重载形式:
形式一:void addWidget(QWidget *widget)
- 参数:
widget
:这是一个指向QWidget
或其派生类对象的指针,代表要添加到布局中的窗口部件,比如QPushButton
、QLabel
等。
- 示例代码:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QPushButton *button = new QPushButton("Click me", &window);
layout->addWidget(button);
window.show();
return app.exec();
}
形式二:void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
- 参数:
widget
:要添加到布局中的窗口部件指针。stretch
:伸缩因子,默认为 0。它决定了该部件在布局中所占的伸缩比例,数值越大,在布局空间变化时该部件伸缩得越多。alignment
:对齐方式,默认为Qt::Alignment()
,即没有特殊的对齐设置。可以使用Qt::AlignLeft
、Qt::AlignTop
等标志来指定部件的对齐方式。
- 示例代码:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QPushButton *button = new QPushButton("Click me", &window);
layout->addWidget(button, 1, Qt::AlignCenter);
window.show();
return app.exec();
}
2. QGridLayout
QGridLayout
用于将子部件排列成网格状,它的 addWidget
方法有多种重载形式,下面介绍常见的两种:
形式一:void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
- 参数:
widget
:要添加到布局中的窗口部件指针。row
:部件所在的行索引,从 0 开始计数。column
:部件所在的列索引,从 0 开始计数。alignment
:对齐方式,默认为Qt::Alignment()
。
- 示例代码:
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QGridLayout *layout = new QGridLayout(&window);
QPushButton *button = new QPushButton("Click me", &window);
layout->addWidget(button, 0, 0);
window.show();
return app.exec();
}
形式二:void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
- 参数:
widget
:要添加到布局中的窗口部件指针。fromRow
:部件起始的行索引,从 0 开始计数。fromColumn
:部件起始的列索引,从 0 开始计数。rowSpan
:部件跨越的行数。columnSpan
:部件跨越的列数。alignment
:对齐方式,默认为Qt::Alignment()
。
- 示例代码:
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QGridLayout *layout = new QGridLayout(&window);
QPushButton *button = new QPushButton("Click me", &window);
layout->addWidget(button, 0, 0, 2, 1);
window.show();
return app.exec();
}
以上就是 Qt 中常见布局类 addWidget
方法的参数介绍,你可以根据实际需求选择合适的方法来添加窗口部件。