如何使用Qt设计器将文本添加到QToolbar?

如何使用Qt设计器将文本添加到QToolbar?,qt,qt-designer,Qt,Qt Designer,我想问一下,是否可以使用Qt Designer在QToolBar上添加一些文本?您可以在Qt Designer中添加,但这是一个不好的攻击,而且是不必要的。相反,通过代码来实现。有两种方法: QToolBar是一个以图形方式表示动作的小部件,由QAction表示。您可以使用QToolBar::addAction(const QString&)添加纯文本操作。例如,如果工具栏对象被简单地称为toolbar,您可以编写toolbar->addAction(“一些文本”)。这将创建一个带有给定文本的按

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

您可以在Qt Designer中添加,但这是一个不好的攻击,而且是不必要的。相反,通过代码来实现。有两种方法:

  • QToolBar
    是一个以图形方式表示动作的小部件,由
    QAction
    表示。您可以使用
    QToolBar::addAction(const QString&)
    添加纯文本操作。例如,如果工具栏对象被简单地称为
    toolbar
    ,您可以编写
    toolbar->addAction(“一些文本”)。这将创建一个带有给定文本的按钮,并返回相应的操作。动作是一种抽象:它们没有图形表示,可以是多个小部件(例如菜单和工具栏)的一部分。是单个小部件为动作提供了一些“物理形状”,例如,为每个动作构造一个按钮

  • QToolBar
    是一组小部件,您可以使用
    QToolBar::addWidget(QWidget*)
    添加这些小部件。因此,如果您想添加一些静态文本,您需要使用该文本创建一个标签并将其添加到工具栏中。这样创建的操作似乎不是很有用,因为用户单击文本时,您不会做出反应(如果您这样做,请参阅上面的第1页)。但如果需要,它可以用来显示和隐藏文本,并充当文本的句柄,允许您更改文本。它实际上是一个
    QWidgetAction
    派生类。请参阅下面的一些代码,以便开始使用


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

    Qt Creator只是一个不干预小部件外观的IDE,所以我已经删除了它tag@eyllanesc谢谢你的帮助。但我真的很想知道如何使用Qt Creator。在这种情况下,Qt Creator并不重要,您可以使用任何其他IDE,它也应该可以工作。@eyllanesc好的。所以我猜我必须编写代码,而不是单独使用Qt Creator,对吗?我想你把QtCreator和QtDesigner搞混了,第一个是IDE,第二个是程序,允许你创建转换成.h的.ui。谢谢!这很有帮助!
    // 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");