如何将多个滑块设置为相同的宽度
how to set multiple sliders to be the same width
基本上,我有一个 QVBoxLayout
和多个 QHBoxLayout
。在 QHBoxLayout
里面,我有一个标签和一个滑块。我的布局如下所示:
但我希望我的滑块看起来像这样:
注意滑块如何从相同位置开始,但左侧的文本是右对齐的。
您必须使用 QGridLayout 而不是 QVBoxLayout + QHBoxLayout:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QSlider *angleSlider = new QSlider(Qt::Horizontal);
QLabel *angleLabel = new QLabel;
QObject::connect(angleSlider, &QSlider::valueChanged, [angleLabel](int value){
angleLabel->setNum(value);
});
angleLabel->setNum(angleSlider->value());
QSlider *rotationSlider = new QSlider(Qt::Horizontal);
QLabel *rotationLabel = new QLabel;
QObject::connect(rotationSlider, &QSlider::valueChanged, [rotationLabel](int value){
rotationLabel->setNum(value);
});
rotationLabel->setNum(rotationSlider->value());
QGridLayout *lay = new QGridLayout(&w);
lay->addWidget(new QLabel("angle"), 0, 0);
lay->addWidget(angleSlider, 0, 1);
lay->addWidget(angleLabel, 0, 2);
lay->addWidget(new QLabel("rotations"), 1, 0);
lay->addWidget(rotationSlider, 1, 1);
lay->addWidget(rotationLabel, 1, 2);
lay->setRowStretch(lay->rowCount(), 1);
w.show();
w.resize(320, 120);
return a.exec();
}
基本上,我有一个 QVBoxLayout
和多个 QHBoxLayout
。在 QHBoxLayout
里面,我有一个标签和一个滑块。我的布局如下所示:
但我希望我的滑块看起来像这样:
注意滑块如何从相同位置开始,但左侧的文本是右对齐的。
您必须使用 QGridLayout 而不是 QVBoxLayout + QHBoxLayout:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QSlider *angleSlider = new QSlider(Qt::Horizontal);
QLabel *angleLabel = new QLabel;
QObject::connect(angleSlider, &QSlider::valueChanged, [angleLabel](int value){
angleLabel->setNum(value);
});
angleLabel->setNum(angleSlider->value());
QSlider *rotationSlider = new QSlider(Qt::Horizontal);
QLabel *rotationLabel = new QLabel;
QObject::connect(rotationSlider, &QSlider::valueChanged, [rotationLabel](int value){
rotationLabel->setNum(value);
});
rotationLabel->setNum(rotationSlider->value());
QGridLayout *lay = new QGridLayout(&w);
lay->addWidget(new QLabel("angle"), 0, 0);
lay->addWidget(angleSlider, 0, 1);
lay->addWidget(angleLabel, 0, 2);
lay->addWidget(new QLabel("rotations"), 1, 0);
lay->addWidget(rotationSlider, 1, 1);
lay->addWidget(rotationLabel, 1, 2);
lay->setRowStretch(lay->rowCount(), 1);
w.show();
w.resize(320, 120);
return a.exec();
}