Избавиться от объекта бога QMainWindow
Я делаю заявку с тремя библиотеками ITK VTK
а также Qt
, Поскольку мне нужны все функции в цикле обработки событий и подключении сигналов и слотов, я определил все функции в определении QMainWindow. Теперь объект mainwindow стал громоздким, и я попытался создать разные классы для различной функциональности, но потом все пошло не так main.cpp
Идея модульности отсутствует. Можете ли вы предложить, как должна быть структура программы?
1 ответ
У меня редко есть что-нибудь еще в main.cpp
чем создавать и показывать мои QMainWindow
потом звоню app.exec()
,
Если твой QMainWindow
начинает становиться громоздким, то это означает, что вы, вероятно, должны организовать этот код в разные связные классы (вместо того, чтобы перемещать его в main.cpp
). Основная идея состоит в том, чтобы изменить код, который выглядит следующим образом:
class MainWindow : public QMainWindow
{
public:
void doSomething();
void foo1();
void foo2();
void foo3();
void bar1();
void bar2();
void bar3();
private:
// ...
}
Для кода, который выглядит так:
class Foo:
{
public:
void doSomething1();
void doSomething2();
void doSomething3();
private:
// ...
}
class Bar:
{
public:
void doSomething1();
void doSomething2();
void doSomething3();
private:
// ...
}
class MainWindow : public QMainWindow
{
public:
void doSomething();
private:
Foo foo_;
Bar * bar_;
// ...
}
Как вы выбираете занятия Foo
а также Bar
и какие члены MainWindow
переход на эти новые классы зависит, конечно, от вашего контекста. Но идея состоит в том, чтобы организовать ваш код разумно, чтобы каждый класс имел "ответственность", а затем MainWindow
может делегировать каждую работу классу, который отвечает за эту работу. Как и в доме, есть электрики для управления электричеством, сантехники для управления водой и т. Д., И ответственность домохозяйки состоит только в том, чтобы вызывать соответствующих парней для выполнения соответствующей работы. В вашем случае вы, вероятно, хотите, чтобы класс выполнял любую работу, связанную с ITK
и класс для выполнения любой работы, связанной с VTK
затем, если они также становятся громоздкими, подразделяют эти классы.