我如何摆脱 qtcreator 中的这个匿名可拖动栏?

How do I get rid of this anonymous draggable bar in qtcreator?

我在 qt creator 中编写了一个程序,但它包含这个我想删除的匿名可拖动工具栏。它不会出现在设计模式中。如果我右键单击它,它会给我一个带有复选框的菜单,我可以 select 在程序 运行 时删除它。这是什么酒吧?我该如何摆脱它?如果我知道它是什么,我可以通过编程告诉它在程序加载时隐藏。

这里有一些截图展示了这个奇怪的问题。在第一个屏幕截图中,鼠标指向栏。第二个演示了右键单击上下文菜单。第三个显示没有栏的程序。该框也可以完全从程序的 window 中拖出。如有必要,我也可以上传照片。

(鼠标指向栏)

(bar有右键菜单!)

(酒吧不见了)

您所拥有的可能是您从每个 QDesigner 创建的 QMainWindow .ui 文件中获得的 mainToolBar QToolBar 对象。 如果您想删除它,请在您的 .ui 文件中找到它并删除它。

但最好三思而后行:您以后可能会决定想要 QToolBar 对象并且(至少 AFAIK)无法在 QDesigner 中重新创建它...

首先,确保你没有自己在代码中添加工具栏(Designer 窗体没有什么神奇的,它只是生成正常的 Qt 代码到 ui_XXXX.h,你应该完全学习,所以你了解真正发生的事情 "under the hood").

其次,也许那是主菜单栏,而不是主工具栏。

那么,就把讨厌的东西去掉吧。在设计视图的右上角,您有一个包含 UI 中所有项目的树。在那里找到 QToolBar。大概叫做mainToolBar。右键单击它并在那里删除它。或者,如果您确实有菜单栏,则找到可能名为 menuBar 的 QMenuBar,然后将其删除。请记住在执行此操作之前进行版本控制提交(或其他备份),以便您可以轻松还原更改。


如果由于某种原因失败了,而你只是想让它工作,你可以随时找到并删除(注意留下的悬空指针,如果可能,将它们设置为 nullptr):

ui->setupUi(this);
// a hack: we want to get rid of the toolbar and the menubar,
// but can't remove it from the .ui, so we delete them like this.
delete findChild<QToolBar *>(); // NULL return value is ok for delete
delete findChild<QMenuBar *>(); // NULL return value is ok for delete

findChild and alternative findChildren.

的文档链接

您必须在构造函数中使用此代码。 ui->mainToolBar->toggleViewAction()->setVisible(false);

mainToolBar 是我的工具栏名称。