首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMainWindow Qt5.7中的强制选项卡式停靠

QMainWindow Qt5.7中的强制选项卡式停靠
EN

Stack Overflow用户
提问于 2017-01-16 01:03:26
回答 2查看 661关注 0票数 5

我正在尝试让我的QMainWindow只允许选项卡式QDockWidgets。如果我正确理解了Qt文档,它应该与setDockOptions-method一起工作。

下面的代码对我不起作用:

代码语言:javascript
复制
 QMainWindow window;
 window.setDockOptions(QMainWindow::ForceTabbedDocks);

我做错了什么?或者它是当前Qt版本中的一个bug?我在MacPro上编程,我用的是Qt5.7。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-03-21 01:25:52

ForceTabbedDocks仅适用于与坞站的用户交互。

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

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2021-01-10 08:31:14

这是与@Xian Nox相同的答案,但适用于python:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41663818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档