Qt GUI设计-是否有一个不可见的字符适合标签文本

Qt GUI Design - Is there an invisible character suitable for label text?

本文关键字:字符 文本 标签 设计 GUI 是否 有一个 Qt      更新时间:2023-10-16

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

在用于显示加载内容的标签上,我当前已将它们设置为"稍后设置",在初始GUI配置中,我在每个标签上调用ui->label_id.setText("");,然后才能看到它们。我真的只是想让它们有一些文本,这样我就可以在设计器中直观地看到它们,但在加载内容之前程序运行时却没有。

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

随着我的gui的扩展,标签越来越多,我不想让程序的加载时间停滞不前,将每个标签的文本设置为",所以这就是我来这里的原因。

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

MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   setStyleSheet("QLabel { color: qrgba(255, 255, 255, 0); }");
}

如果您想有选择地将样式表应用于标签,可以使用所有类型的Qt样式表选择器类型。例如,可以使用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);

样式表答案的替代方案。

QList<QLabel*> widgets = this->findChildren<QLabel*>();
for (QLabel *label : widgets) {
    label->setText("");
}

将其放置在MainWindow类构造函数中。它将从您的窗口中获得所有QLabel的列表,然后您可以循环浏览它们并将文本设置为"。

您可以使用对象检查器。在对象检查器中,您将看到一个标签列表,当您单击某些标签时,您会看到小部件周围的边框。这样你就可以在不添加任何文本的情况下查看标签。