如何在 QVBoxLayout 中显示 QString

Posted

技术标签:

【中文标题】如何在 QVBoxLayout 中显示 QString【英文标题】:How to show a QString in a QVBoxLayout 【发布时间】:2014-07-22 09:46:52 【问题描述】:

我试图在 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】:

怎么了?

不能那样直接添加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();

附:我强烈建议您使用设计器来部署小部件布局。

【讨论】:

非常感谢。我会尽快验证您的回答。 Visual Studio 2013 中设计器的使用相当复杂。 哦...如果 Qt 将来让您感到惊讶,也许您可​​以考虑使用 Qt creator 作为开发 Qt 小部件的 IDE。 Ui 设计器和代码编辑器之间来回切换的能力非常有帮助。

以上是关于如何在 QVBoxLayout 中显示 QString的主要内容,如果未能解决你的问题,请参考以下文章

Qt:如何在 QVBoxLayout 中交替对齐 QTextEdit?

使两个 QVBoxLayout 在 QHBoxLayout 中可调整大小

Pyside:在 QVBoxLayout 小部件中设置行的背景

如何在 QVBoxLayout 中为更改小部件位置设置动画

如何在窗口中显示文件夹中所有文件的名称? Qt C++ [关闭]

QVBoxLayout移除控件之后没有消失