我试图在 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();
现在 slider 工作正常,但我无法显示文本。而且我绝对没有发现任何关于这样的事情,无论如何。我怎样才能在 QVBoxLayout 中显示一个字符串?
最佳答案
怎么了?
你不能那样直接添加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();
附言我强烈建议您使用设计器来部署您的小部件布局。
关于c++ - 如何在 QVBoxLayout 中显示 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884021/