Mam takie klasy w hierarchii dziedziczenia:
mainframe.h
(klasa odpowiedzialna za "ramkę" aplikacji):
class MainFrame: public QMainWindow {
Q_OBJECT
public:
explicit MainFrame(QWidget* canvas, QWidget* parent = nullptr);
// ... pozostałe metody ...
};
canvas.h
:
class Canvas: public QWidget {
Q_OBJECT
// ... pozostałe metody ...
};
konstruktor MainFrame
w mainframe.cpp
:
MainFrame::MainFrame(QWidget* canvas, QWidget* parent): QMainWindow(parent) {
QWidget* central = new QWidget;
QLayout* layout = new QHBoxLayout;
layout->addWidget(canvas);
central->setLayout(layout);
setCentralWidget(central);
}
Problem jest taki, że chociaż program działa i wszystko wyświetla się jak należy. To po zakończeniu aplikacji pojawia się znane okienko (z Windows), że: "Program xxx.exe przestał działać. System Windows może wyszukać rozwiązanie tego problemu w trybie online."
Dodam, że w konsoli nie pojawiają się żadne komunikaty, że coś poszło nie tak. Może problem jest w zagnieżdżaniu widgetów? Nie mam jakiegoś super doświadczenia z biblioteką Qt ale wiem, że w klasie QMainWindow
trzeba odwołać się do widgetu centralnego i w nim dopiero zdefiniować(przypisać) układ, a w nim już te widgety jakie chcemy. No i tak robię jak widać. Ale może coś źle robię? A może po prostu Windows tak już ma.
PS. Oczywiście sam konstruktor MainFrame
jest dobrze wywoływany, przekazuję do niego adres obiektu mojej klasy Canvas
:
guiservice.h
:
class GuiService {
public:
GuiService(): mainFrame(&canvas) {}
public:
Canvas canvas;
MainFrame mainFrame;
};