我正在尝试在QSLider之前放置标题,以便用户知道QSlider的用途。 我在QVBoxLayout上的QDialog Box中设置了2个QSlider,如下所示:
QSlider * slider1 = new QSlider(Qt::Horizontal);
QSlider * slider2 = new QSlider(Qt::Horizontal);
QDialog * opts = new QDialog;
QVBoxLayout * layout = new QVBoxLayout;
layout->addWidget(Qstring("Label for Slider 1"));
layout->addWidget(slider1);
layout->addWidget(QString("Label for Slider 2"));
layout->addWidget(slider2);
opts->setLayout(layout);
opts->show();
现在滑块工作正常,但我无法显示文字。我完全没有发现这样的事情,无论如何。如何在QVBoxLayout中显示字符串?
答案 0 :(得分:2)
你无法直接添加QString
,因为QString
只是字符串操作的一个方便的类,它不对UI负责显示。
您需要 QLabel
的实例才能保留QString
:
QLabel *label_1 = new QLabel(this);
label_1->setText("Label for Slider 1");
layout->addWidget(label_1);
layout->addWidget(slider1);
此外,您可以考虑使用nested layout:创建一个新的水平布局,其中包含一个QLabel
和一个QSlider
,然后将布局添加到对话框布局中。
以下是代码:
QSlider * slider1 = new QSlider(Qt::Horizontal);
QSlider * slider2 = new QSlider(Qt::Horizontal);
QDialog * opts = new QDialog;
QVBoxLayout * layout = new QVBoxLayout; // layout for Dialog itself
QHBoxLayout * layout_1 = new QHBoxLayout(this); // layout for slider1 & label1
QHBoxLayout * layout_2 = new QHBoxLayout(this); // layout for slider2 & label2
QLabel *label_1 = new QLabel(this);
QLabel *label_2 = new QLabel(this);
label_1->setText("Label for Slider 1");
label_2->setText("Label for Slider 2");
layout_1->addWidget(label_1);
layout_1->addWidget(slider1); // [Label_1][Slider1]
layout_2->addWidget(label_2);
layout_2->addWidget(slider2); // [Label_2][Slider2]
layout->addLayout(layout_1);
layout->addLayout(layout_2);
opts->setLayout(layout);
opts->show();
P.S。我强烈建议您使用设计器来部署窗口小部件布局。