如何使用 Qt Designer 将文本添加到 QToolbar?

How to add text onto QToolbar with Qt Designer?

我想问一下,是否可以使用 Qt Designer 在 QToolBar 上添加一些文本?

您可以在 Qt Designer 中执行此操作,但这是一个糟糕的 hack,而且没有必要。相反,通过代码来完成。有两种方式:

  1. QToolBar是一个图形化表示动作的widget,用QAction表示。您可以使用 QToolBar::addAction(const QString &) 添加纯文本操作。例如。如果工具栏对象简单地称为 toolbar,您将编写 toolbar->addAction("Some text");。这将创建一个带有给定文本的按钮,以及 return 相应的操作。操作是一种抽象:它们没有图形表示,并且它们可以是多个小部件(例如菜单和工具栏)的一部分。正是各个小部件为操作赋予了某种“物理形状”,例如为每个动作构造一个按钮。

  2. QToolBar,在较低级别,是一个小部件集合,您可以使用 QToolBar::addWidget(QWidget *) 添加这些小部件。因此,如果您想添加一些静态文本,您可以创建一个带有该文本的标签并将其添加到工具栏。这样创建的操作可能看起来不是很有用,因为您不会对用户单击文本做出反应(如果您这样做,请参见上面的第 1 页)。但如果需要,它可用于显示和隐藏文本,并充当文本的句柄,允许您也更改文本。真是QWidgetAction派生class。请参阅下面的一些代码来帮助您入门。

// The text can be empty, in case it was meant to be set sometime later
QAction *addText(QToolBar *toolbar, const QString &text = {})
{
  auto *const label = new QLabel;
  auto *const action = toolbar->addWidget(label);
  // Any changes to the action's text should be propagated to the label.
  QObject::connect(action, &QAction::changed, label, [action,label]{
    label->setText(action->text());
  });

  action->setParent(toolbar); // so that the action won't leak
  action->setText(text);
  action->setVisible(true);
  return action;
}

// inside some method
auto *action = addText(toolbar, "Some text");
// sometime later
action->setText("Some other text");

一种更灵活的方法是派生 QWidgetAction 来创建例如StaticTextAction,并将标签创建代码放入StaticTextAction::createWidget()。但是这种灵活性很可能是不必要的,因为您在这里之后只是一些应用于工具栏且没有其他用途的静态文本(例如,您不会将其添加到任何其他小部件或菜单)。