Плавающий / встроенный QDockWidget в QWidget (CentralWidget KXmlGuiWindow, разработанный в QT Designer) - PullRequest
0 голосов
/ 10 февраля 2009

Я просто пытаюсь войти в программу QT (и KDE) и попал в ловушку, пытаясь добавить плавающий перетаскиваемый QDockWidget в файл .ui (основанный на QWidget), который встроен в моя программа KDE 4.

Это все из базового шаблона, предоставленного KDevelop 4, поэтому, хотя я понимаю, что происходит, я просто не знаю, как лучше его изменить.

Вот сделка: main.cpp порождает новое AEmpire окно, которое запускает весь показ:

AEmpire::AEmpire()
       : KXmlGuiWindow(),
         m_view(new AEmpireView(this)),
         m_printer(0)
{
    // tell the KXmlGuiWindow that this is indeed the main widget
    setCentralWidget(m_view);

    setupActions();
    setupGUI();
}

Когда создается новый AEmpireView(this) (который наследуется от QWidget) и назначается m_view, этот конструктор называется:

AEmpireView::AEmpireView(QWidget *)
{
    ui_aempireview_base.setupUi(this);
    settingsChanged();
    setAutoFillBackground(true);
}

Итак, когда я редактирую пользовательский интерфейс в моей программе в QT Designer, я на самом деле редактирую файл AEmpireView_base пользовательского интерфейса, который является QWidget. Он просто представляет основной вид KXmlGuiWindow (полученный из QMainWindow) и загружается во время выполнения.

Итак, как мне добавить плавающие, перетаскиваемые QDockWidget в мое основное приложение? Является ли их разработка по отдельности и добавление их в пользовательский интерфейс лучшим вариантом? Или, может быть, удалив весь класс AEmpireView и заставив мой пользовательский файл напрямую представлять объект KXmlGuiWindow, который должен быть загружен AEmpireClass?

Или я полностью упускаю из виду нечто очевидное? Спасибо за чтение!

1 Ответ

1 голос
/ 24 февраля 2009

Я бы разработал содержимое QDockWidget как отдельные файлы пользовательского интерфейса. Затем создайте их и вставьте в QDockWidgets в конструкторе AEmpire.

...