簡體   English   中英

在 QMainWindow Qt5.7 中強制選項卡式 Dock

[英]Force Tabbed Dock in QMainWindow Qt5.7

我試圖讓我的 QMainWindow 只允許選項卡式 QDockWidgets。 如果我正確理解 Qt 文檔,它應該可以與 setDockOptions-method 一起使用。

以下代碼對我不起作用:

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

我究竟做錯了什么? 或者它是當前Qt版本中的錯誤? 我在 MacPro 上編碼,我使用的是 Qt 5.7。

謝謝

ForceTabbedDocks僅適用於用戶與碼頭的交互。

要以編程方式在選項卡中添加新停靠欄,您需要使用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);
    }
}

這與@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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM