Подтвердить что ты не робот

QMainWindow с только QDockWidgets и отсутствием центрального виджета

У нас есть окно с несколькими компонентами в QDockWidget s. В идеале мы хотели бы, чтобы все компоненты были присоединены, но есть один компонент, который, вероятно, всегда будет виден. Итак, мы сделали этот центральный виджет.

Однако это не позволяет нам создать стек с вкладками для прикрепляемых виджетов (как вы можете создать, например, вызов tabifyDockWidget), содержащий этот центральный виджет. Итак, мы попытались создать пользовательский интерфейс без центрального виджета, но с несколькими QDockWidget s.

Я не могу найти никаких указаний в руководстве QDockWidget или QMainWindow, что это недопустимая ситуация. Мы создаем как можно больше в Qt Designer, и, похоже, у вас есть центральный виджет - как он показывает, сбой после ручного редактирования XML.

Вопрос: законно ли иметь QMainWindow только с QDockWidget и нет центрального виджета? Является ли Qt Designer просто грохотом из-за ошибки, или это говорит мне, что это плохая идея, и мне нужно прекратить это делать?

4b9b3361

Ответ 1

Документация Qt говорит, что:

Примечание. Создание главного окна без центральный виджет не поддерживается. Вы должен иметь центральный виджет, даже если он является просто заполнителем.

Итак, вы можете просто скрыть пустой центральный виджет:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->centralWidget->hide();
}

Ответ 2

Ну, это работает для меня, если я наберу это после строки "ui- > setupUi (this)".

MainWindow::setCentralWidget(NULL);

Если это "legal", я не знаю, но я знаю, что это хорошо работает для меня.

(и я знаю, что это старый вопрос, но все же действительный:))

Ответ 3

Чушь! У меня есть полностью функциональный QMainWindow с только QDockWidgets и нет центрального виджета. Я не знаю, как это "законно", но это возможно, если вы создадите его вне QtDesigner, который достаточно прост.

Пример

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_()

Ответ 4

Я столкнулся с этой проблемой с pyside (QT для python). Я просто нуждался в доках, поэтому мне пришлось создать поддельный виджет (т.е. Ярлык), чтобы он стал центральным. Однако, как только я скрою это, доки больше не могут быть изменены. То же самое произошло, если я поставил None/null в качестве центрального виджета.

После множества непроизводительных поисков в Интернете я выяснил, что проблема заключалась в начальной настройке местоположений док-станции (сверху/снизу/влево/вправо). Если я поместил их всех в одно и то же положение (то есть сверху), позволяя пользователю его организовать, проблема не проявляется. Затем я попытался использовать только верхнюю и нижнюю позиции (так как мне удалось организовать доки так, как я хотел, не используя боковые позиции (два в верхней и одну внизу). К моему удивлению, с этой договоренностью проблема окончательно решена.

Ответ 5

Я столкнулся с той же проблемой, и я надеялся, что для этого уже есть какое-то хорошее решение.

Кажется, нет, поэтому в конце концов я думаю, что буду использовать MdiArea.

Может быть, вы тоже это рассмотрите? Он работает по-разному, но, возможно, он достаточно хорош:)