0

好的,我正在使用 Qt Designer for c++ 开发 GUI,并且我设置了一堆标签,以便在文件加载后显示文件中的一些内容。

在用于显示加载内容的标签上,我目前将它们设置为“稍后设置”,并且在初始 GUI 配置中,我ui->label_id.setText("");会在每个标签被看到之前调用它们。我真的只是希望它们有一些文本,以便我可以在设计器中直观地看到它们,但在加载内容之前程序运行时没有任何文本。

所以我的问题是:这是处理这个问题的最好方法吗?或者是否有一个我可以在设计器中将文本设置为在运行时不会出现的字符?

随着我的 gui 扩展越来越多的标签,我不想拖慢程序的加载时间,将每个文本设置为“”,这就是我在这里的原因。

4

3 回答 3

1

一种可能的解决方案是使用透明颜色(0 alpha 值)为该标签设置颜色。这可以通过小部件构造函数中的样式表来处理:

MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);

   setStyleSheet("QLabel { color: qrgba(255, 255, 255, 0); }");
}

如果您想有选择地将样式表应用于标签,您可以使用各种Qt Style Sheet Selector Types。例如,您可以使用 ID 选择器。如果您在 QtDesigner 中将objectName标签的属性设置为label_1,则可以通过设置此样式表来选择性地隐藏此标签:

setStyleSheet("#label_1 { color: qrgba(255, 255, 255, 0); }");

更高级的解决方案是返回对象名称的样式表的方法:

QString MainWindow::styleSheetForHiddenLabels(const QStringList &labelObjectNames)
{
   QString styleSheet;

   foreach (QString labelName, labelObjectNames) {
      QString style("#");
      style.append(labelName);
      style.append(" { color: qrgba(255, 255, 255, 0); }");
      styleSheet.append(style);
   }

   return styleSheet;
}

这种方法可以这样使用:

QStringList labelNames;
labelNames << "label1" << "label2" << "label3";

QString stylesheet = styleSheetForHiddenLabels(labelNames);
setStyleSheet(stylesheet);
于 2013-06-26T14:16:24.197 回答
0

样式表答案的替代方案。

QList<QLabel*> widgets = this->findChildren<QLabel*>();

for (QLabel *label : widgets) {
    label->setText("");
}

把它放在你的 MainWindow 类构造函数中。它将从您的窗口中获取所有 QLabels 的列表,然后您可以循环浏览它们并将文本设置为“”。

于 2013-06-26T14:33:02.183 回答
0

您可以使用对象检查器。在对象检查器中,您将看到标签列表,当您单击某些标签时,您会看到小部件周围的边框。这样,您无需在其中添加任何文本即可查看标签。

于 2013-07-03T10:49:09.447 回答