【问题标题】:(Qt) two rows of widgets in a toolbar(Qt) 工具栏中的两行小部件
【发布时间】:2023-04-05 21:27:01
【问题描述】:

我不知道如何创建带有两行小部件的工具栏。我正在开发一个 Python3/Qt4 项目。

我的猜测:

  • 向工具栏小部件添加小部件

  • 为小部件添加垂直布局(或QGridLayout,没关系)

  • 将工具栏的按钮添加到布局中

但我得到的只是一个小而空的工具栏:我是否需要以某种方式“拉伸”小部件?

我的 Python3 代码,试图在工具栏中垂直插入两个按钮:

    self.main_toolbar = self.addToolBar('MyToolBar')

    self.toolbar_widget = QtGui.QWidget(self.main_toolbar)
    self.toolbar_layout = QtGui.QVBoxLayout()
    self.toolbar_widget.setLayout(self.toolbar_layout)

    button1 = QtGui.QPushButton(self)
    button1.setText("button1")
    self.toolbar_layout.addWidget( button1 )

    button2 = QtGui.QPushButton(self)
    button2.setText("button2")
    self.toolbar_layout.addWidget( button2 )

【问题讨论】:

  • 为什么要将按钮添加到布局而不是工具栏小部件?尝试将按钮添加到工具栏_widget.addWidget(button1)
  • 您无法将小部件添加到小部件:属性错误:'QWidget' 对象没有属性'addWidget'。
  • QToolbar 有一个方法 QAction * QToolBar::addWidget ( QWidget * widget )
  • 精确:但 toolbar.addWidget(button1) 没有考虑垂直布局。或者我错过了什么?
  • 我是 C++ 和 QT 用户,但布局和小部件的概念仍然相同,因此您可以在此布局中添加布局(垂直或水平),您只需添加工具栏小部件。但在您的工具栏小部件您将添加所有必需的按钮,在工具栏小部件中添加所有按钮后,您只需调用 layout->addWidget(QToolBar*)。希望它澄清

标签: qt pyqt toolbar


【解决方案1】:

您发布的代码很好,只是您忘记将小部件添加到工具栏。

您可以使用QToolBar.addWidget:

    self.main_toolbar.addWidget(self.toolbar_widget)

【讨论】:

  • 当然它看起来像废话,这不是你应该使用工具栏的方式。
  • @KubaOber。对我来说似乎没问题,特别是如果删除了布局边距并调整了间距。基本上,它只是看起来像两个窄按钮,一个在另一个之上——我想这就是 OP 所追求的。
【解决方案2】:

很简单:您确实需要两个工具栏,一个在另一个之下。

您不能仅仅将子小部件添加到工具栏。您的 main_toolbar 大概属于 QToolBar 类。你不能简单地给它添加一个toolbar_widget!

您也不能更改QToolBar 的布局。工具栏自己管理其子项的布局,您不应该弄乱它 - 它不是这样设计的。

将小部件添加到工具栏的唯一方法是通过工具栏的addWidget 方法,不是布局!

您的代码错误。您可以做的,以及您可以使用工具栏做的所有事情是:

self.main_toolbar = self.addToolBar('MyToolBar')

button1 = QtGui.QPushButton(self)
button1.setText("button1")
self.main_toolbar.addWidget( button1 )

button2 = QtGui.QPushButton(self)
button2.setText("button2")
self.main_toolbar.addWidget( button2 )

工具栏根本不支持您想要做的事情。工具栏可能会将其项目排列在多行中如果它们并不完全适合。这可能取决于风格。您可以随意插入具有内部布局和两个子按钮的“高”工具栏小部件,但它看起来会非常难看。

【讨论】:

  • 这完全是错误的 :) 您可以将任何您喜欢的小部件添加到工具栏,就像任何其他容器小部件一样。
  • @ekhumoro 我不是说你不能添加你喜欢的小部件,只是你不能改变工具栏上的布局。工具栏管理自己的布局,所以self.toolbar_widget.setLayout(self.toolbar_layout) 是错误的。
  • 一点都没有错!问题中的代码运行良好(如果您不相信我,您可以自己测试一下)。唯一缺少的是将小部件显式添加到工具栏。
  • @ekhumoro 通常,如果您将小部件添加到在小部件上设置的布局中,则不需要将其添加到该小部件中。唉,QToolBar 不应该这样使用。严重地。您不应该在其上设置任何布局。你应该只打电话给QToolBar::addAction 或QToolBar::addWidget。是的,如果您以这种方式滥用它,它“有效”,但您以这种方式破坏了工具栏的固有功能。祝你在导航这些按钮等方面好运。
  • @ekhumoro 基本上,如果你想管理布局本身,没有理由使用QToolBar。只需使用QWidget。我的意思是 - 如果不是因为它提供的小部件的固有布局,QToolBar 的意义何在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多