Dziedziczenie po MainWindow
-
Nie wiem na ile dobrze umiem określić problem. Dużo problemów rozwiązałem sam, czytając dokumentację. Kilka banałów rozwiązałem dzięki poradom otrzymanym na tym forum. Posługuję się tym IDE całkiem sprawnie jak na moje potrzeby. Doszedłem wczorajszej nocy do problemu dziedziczenia. Mam 2 okna - jedno Main i jeden Dialog. W pliku nagłówkowym zdefiniowalem sobie pewną przydatną funkcję void Ciach();, operacje jakie wykonuję są zdefiniowane standardowo jak książka pisze void MainWindow::Ciach { }
Funkcja ta korzysta z danych pozyskiwanych z QLineEdit (w oknie głównym), ale jest na tyle dobrze napisana, że chciałbym korzystać z wyników jej pracy w moim dialogu. Gdy pisałem aplikacje konsolowe nie miałem kłopotu z dziedziczeniem, niestety w tym przypadku gdzie mam do czynienia z GUI leżę i kwiczę. Niby można ratować się zmiennymi globalnymi ale to bez sensu. Gdyby ktoś chciał mi to wytłumaczyć łopatologicznie byłbym wdzięczny. -
Najpierw potrzebuję wyjaśnienia: chcesz użyć wyniku jaki zwraca Ciach (ok, nic nie zwraca, ale zmienia stan objektu), chcesz wykorzystać samą funkcję (kod) w swoim dialogu. Podejrzewam to drugie, ale jakoś nie jestem pewien z opisu.
Z dziedziczeniem QObjectów jest trochę nietypowo, bo nie da się dziedziczyć od dwóch QObjektów naraz. Np:
@
class Test: public QLineEdit, public QComboBox
// nie przejdzie
@Jeśli chesz mieć ::ciach() dostępne w dialogu i oknie głównym, musisz umieścić tę funkcję w innej klasie, nie dziedziczącej QObject. Może to wymagać pewnych przeróbek kodu, ale z reguły daje się zrobić. Przykład:
@
class GuiHelper {
public:
void ciach(QObject *obj) {
obj->doStuff(); // itd.
}
};class TwojDialog: QDialog, GuiHelper {
// ...
@To tylko jeden ze sposobów, jak chcesz to inne też podam.
-
void MainWindow::Ciach(){
int indexList = ui->WyjazdytableView->selectionModel()->currentIndex().row();
}Jest to dla mnie o tyle ważne, że w tableView mam komplet danych, on_clicked() otwiera Dialog, w którym mam podgląd 'wizualny' układu dokumentu, który będzie po akceptacji drukowany. W Dialogu potrzebuje tylko część danych więc albo zmienne globalne albo coś dziedziczyć po czymś.
-
Dodaj do klasy dialogu zmienną, np "uiData". Natępnie w MainWindow::on_clicked() zainicjuj dialog i ustaw tę zmienną.
-
Mimo wszystko prosiłbym o wzorcow przykład bo nijak nie potrafię tego dokonać. W akcie desperacji próbowałem również patentu z Singleton'em(opisany tutaj: http://www.win32prog.republika.pl/ebook/qtkurs.pdf) również ze słabym skutkiem...