在Qt5.7中如何强制使QMainWindow的工具栏选项卡生效

5

我想让我的QMainWindow只允许使用选项卡式的QDockWidgets。如果我理解Qt文档正确的话,应该可以使用setDockOptions方法实现。

以下代码对我无效:

 QMainWindow window;
 window.setDockOptions(QMainWindow::ForceTabbedDocks);

我做错了什么?还是当前Qt版本中存在错误?我正在使用MacPro并且正在使用Qt 5.7进行编码。

谢谢

2个回答

4

ForceTabbedDocks 只适用于用户与 docks 的交互。

如果要以编程方式在选项卡中添加新的 docks,则需要使用 QMainWindow::tabifyDockWidgets。例如:

void MainWindow::addTabbedDock(Qt::DockWidgetArea area, QDockWidget *widget)
{
    QList<QDockWidget*> allDockWidgets = findChildren<QDockWidget*>();
    QVector<QDockWidget*> areaDockWidgets;
    for(QDockWidget *w : allDockWidgets) {
        if(dockWidgetArea(w) == area) {
            areaDockWidgets.append(w);
        }
    }

    if(areaDockWidgets.empty()) {
        // no other widgets
        addDockWidget(area, widget);
    } else {
        tabifyDockWidget(areaDockWidgets.last(), widget);
    }
}

0

这个答案和 @Xian Nox 的一样,但是适用于 Python:

def addTabbedDock(self, area: QtCore.Qt.DockWidgetArea, dockwidget: QtWidgets.QDockWidget):
  curAreaWidgets = [d for d in self.findChildren(QtWidgets.QDockWidget)
                    if self.dockWidgetArea(d) == area]
  try:
    self.tabifyDockWidget(curAreaWidgets[-1], dockwidget)
  except IndexError:
    # First dock in area
    self.addDockWidget(area, dockwidget)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接