如何在QVBoxLayout中显示QString

时间:2014-07-22 09:46:52

标签: c++ qt

我正在尝试在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中显示字符串?

1 个答案:

答案 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。我强烈建议您使用设计器来部署窗口小部件布局。