【发布时间】:2017-01-22 12:42:19
【问题描述】:
我正在用 Qt 编写一个程序。 我有一个 QMainWindow 和一个名为 createMenus() 的函数,它返回一个 QMenuBar*。
在 MainWindow 类中:QMainWindow,我调用:this->setMenuBar(createMenus());
所以我有一个漂亮的 MainWindow,顶部有一个菜单。
现在,在“文件”中,我想放置一个按钮来创建一个新窗口(大概是一个 QWidget?)。 我想在新窗口的顶部显示相同的 MenuBar。
void MainWindow::createWindow()
{
QWidget* window = new QWidget;
QVBoxLayout* center_box = new QVBoxLayout;
center_box->setContentsMargins(0, 0, 0, 0);
center_box->setSpacing(0);
#ifndef Q_OS_MAC
QMenuBar* newMenu = createMenus();
center_box->setMenuBar(newMenu);
#endif
window->setLayout(center_box);
}
这有效(在 Linux 中),因为 QMenuBar 显示在新窗口中。 后果就是MainWindow中的QMenuBar消失了。
有人可以指导我使用相同的 QMenuBar 创建多个窗口的最佳实现吗?
【问题讨论】:
-
您必须使用
new创建新菜单,否则其他窗口将获得所有权 -
嗨@deW1,我该怎么办?现在,在 createMenus() 中,我有函数“bar = new QMenuBar()”和“return bar;”。因此,从技术上讲,*newMenu 始终是一个新菜单。结果,上面的代码在新窗口中没有显示任何菜单。
-
向我们展示更多代码,例如通过创建Minimal, Complete, and Verifiable example。至少我们需要看到你的
createMenus()的代码,否则我们只能猜测。 -
我所做的是创建一个创建新 QMenuBar 并填充它的方法,然后从每个窗口的构造函数中调用该方法一次。这样每个窗口都有自己的 QMenuBar,但它们都是相同的,没有代码重复。