QMainWindow with only QDockWidgets and no central widget
我们在
但是,这不允许我们创建包含此中央小部件的可停靠小部件的选项卡式堆栈(您可以通过例如调用
的 UI
我在
问题是:拥有一个只有
Qt 的文档说:
Note: Creating a main window without a
central widget is not supported. You
must have a central widget even if it
is just a placeholder.
所以你可以隐藏空的中央小部件:
1 2 3 4 5 6 | MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->centralWidget->hide(); } |
如果我在"ui->setupUi(this)"生成的行之后键入它,它对我有用。
1 | MainWindow::setCentralWidget(NULL); |
如果是
(我知道这是一个老问题,但仍然有效:))
胡说八道!我有一个功能齐全的 QMainWindow,只有 QDockWidgets 而没有中央小部件。我不知道它有多"合法",但如果您在 QtDesigner 之外创建它,这很容易。
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from PyQt4 import QtCore, QtGui class Window(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.setWindowTitle('Dock Widgets') self.setTabPosition( QtCore.Qt.TopDockWidgetArea , QtGui.QTabWidget.North ) self.setDockOptions( QtGui.QMainWindow.ForceTabbedDocks ) self.dockList = [] for dockName in 'First Second Third Fourth'.split(): dock = QtGui.QDockWidget(dockName) dock.setWidget(QtGui.QListWidget()) dock.setAllowedAreas(QtCore.Qt.TopDockWidgetArea) self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock) self.dockList.append( dock ) if len(self.dockList) > 1: for index in range(0, len(self.dockList) - 1): self.tabifyDockWidget(self.dockList[index],self.dockList[index + 1]) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.show() app.exec_() |
我在 pyside(python 的 QT)中遇到了这个问题。我只需要码头,所以我必须创建一个假小部件(即标签)作为中心。但是,一旦我隐藏它,码头就不能再自由调整大小了。如果我将 None/null 作为中心小部件,也会发生同样的情况。
在互联网上进行了大量无效搜索后,我发现问题出在码头位置的初始设置(上/下/左/右)。如果我把它们都放在同一个位置(即顶部)让用户组织它,问题就不会出现。然后我尝试只使用顶部和底部位置(因为我可以按照我想要的方式组织码头而不使用横向位置(顶部两个,底部一个)。令我惊讶的是,这种安排问题终于解决了。
我也遇到过同样的问题,我希望已经有一些不错的解决方案。
似乎没有,所以最终我想我会使用 MdiArea。
也许你也可以考虑一下?它以不同的方式工作,但也许它很好:)