Hello. Thanks for reply. I’m sorry. It was my first post and I wanted to show as much as possible of code to described my problem as good as I can. I followed your advise and my problem is solved!.
Sorry again and have a great day!
@Lukasz125 said in Struktura aplikacji QWidget czy MainWindow:
Co ma byś pierwsze QWidget z ekranem Loading i potem dodawać kolejny QWidget z logowaniem czy bazą ma być MainWindow z zasadniczą cześcią aplikacji i do niej dołączyć kolejne QWidgety.
Myślę, że oba sposoby są możliwe, jednak ten drugi, z MainWindow, według mnie jest prostszy. Ja z moją wiedzą na temat Qt wybrałbym ten drugi sposób. :-)
Ten QDialog musi być utworzony gdzieś. Możesz to zrobić w swoim głównym oknie, wtedy komunikacja będzie prosta. Np.:
void MainWindow::showDialog()
{
auto dialog = new Szukaj(this);
connect(dialog, &QDialog::accepted, this, [=]() {
pokaz(dialog->srednica());
dialog->hide();
dialog->deleteLater();
});
dialog->show();
}
Parę innych uwag:
teksty widoczne dla użytkowników powinny być opięte w funkcje tłumaczące: tr("Typ uszczelki")
przekazując QString (i wszelkie inne "duże" klasy z Qt) do funkcji, używaj const ref: void MainWindow::pokaz(const QString &srednica)
polecam programować wyłącznie po angielsku, takie mieszanie języków jest dość mylące. No i nie do użycia w międzynarodowej drużynie
ten kod zdecydowanie wyrzuć:
MainWindow q;
q.pokaz(srednica);
Bo on tworzy nowe okno MainWindow, a tego raczej nie chcesz.
@kasttt333 To jest domyślna wartość. W C++ kiedy zadeklarujesz funkcję tak: void foo(int x = 42) to kiedy zawołasz ją jako foo(60) to x będzie miało wartość 60, a jeśli tak foo() to x będzie miało tą domyślną wartość 42.
parent to jest wskaźnik na obiekt rodzica. Nullowy wskaźnik mówi, że obiekt nie ma rodzica. Pisze się tak żeby nie trzeba było pisać new QObject(nullptr) kiedy chcesz stworzyć obiekt bez rodzica, tylko wystarczy new QObject albo new QObject().
Jeśli trzeba to rodzica można potem nadać albo zmienić za pomocą setParent(cośtam);
Jesteś w stanie to nagrać? Nie spotkałem się z takim bugiem.
Jaki to system operacyjny? Jaka karta grraficzna? Sterowniki aktualne?
Pierwsze skojarzenie to sterowniki graficzne Intela, na nich najczęściej są artefakty graficzne.
Działa wielkie dzieki.
Wychodzi na to że Debian nie rozpoznaje pliku z Qt Creatora jako binarnego ale po otwarciu w folderze "Release " w terminalu i użyciu ./<nazwapliku> wszytko działa.
Tak jak napisał @artwaw zadeklarowanie metody jako slot dodaje ją do meta opisu klasy jako slot.
Jeśli chodzi o connect, to metoda nie musi być slotem, żeby dało się ją podłączyć. Używając składni ze wskaźnikami do funkcji możesz do sygnału podłączyć dowolną metodę czy lambdę. Używając starej składni z makrami SIGNAL/SLOT metoda musi być slotem, ponieważ dopasowanie odbywa się po stringach opisujących sygnał/slot w meta opisie klasy.
Warto też dodać, że ponieważ można łączyć nie tylko sloty, to do sygnałów można podpinać też inne sygnały, używając którejkolwiek ze składni. Można to wykorzystywać do tworzenia łańcuchów wywołań.
To czy metoda jest slotem czy nie nie wpływa jedynie na możliwą składnię connecta. Ponieważ zadeklarowanie metody jako slot dodaje ją do meta opisu klasy to można taki slot wykorzystać w wielu jej metodach takich jak QMetaObject::connectSlotsByName czy QMetaObject::indexOfSlot. Sloty są również wywoływalne z QML, bez konieczności używania makra Q_INVOKABLE.
@karlowic Sqllite ma niestety bardzo ograniczoną funkcjonalność, jeżeli o takie problemy chodzi. Najlepiej napisać samemu funkcję sortującą: https://stackoverflow.com/questions/35371168/locale-aware-collation-in-sqlite-using-qt
Nie wiem co jest nie tak, ale jedno co na pewno mozesz spróbować to zaktualizować Qt (5.15.2) i Qt Creator (4.14.2). Przy Qt 5.15 raczej lepiej też wybrać najnowszy NDK (nie 19.x).
Cześć. Od tego dokładnie są wątki. Długo trwającą funkcję uruchom na innym wątku a na jej końcu wyemituj sygnał do głównego wątku z wynikiem. Jeśli nie chcesz wysyłać sygnału z tamtej funkcji to możesz też utworzyć QFutureWatcher i podpiąć się do jego sygnału finished. Przykład znajdziesz tutaj: QFutureWatcher.
Jeśli chcesz pokazać np. pasek postępu to możesz również z tej funkcji na innym wątku emitować sygnał z procentem a na głównym wątku podpiąć się do niego i aktualizować wartość paska.
@damian28102000 said in Cały framework przestał bez powodu działał:
@sierdzio Zainstalowałem 6.0.1 i działa jak marzenie.
OK, fajnie :-)
Czy może wiesz, czy ta wersja ma już popularne błędy, czy jakieś różnice znaczące względem 6.0.0?
W wersjach 0.0.x jest zawsze jedynie bug fixing - nie ma nowych funkcjonalności.
@death_scripter said in Nie otwieranie się cmd po uruchomieniu programu:
Dodatkowo w momencie gdy ma zadziałać funkcja "cin" kompilator dostaje error'a i przestaje działać.
Pokaż swój kod i pokaż error jaki wyśiwetla kompilator. Zapewne brakuje jakiegoś include albo namespace.
Hej, nie robiłem w prawdzie w PyQt5 tylko przy użyciu C++ ale mi pomogło użycie flagi:
this->setWindowFlag(Qt::WindowStaysOnTopHint);
ewentualnie użyj czegoś takiego:
stackUnder(QWidget* w);
Hmmm co do znajomości Qt to tworzę właśnie grę typu space shooter. Jeszcze nie jest skończona ale większość już działa całkiem dobrze, https://github.com/TadekBiela/GalacticWar, nie wiem czy taka znajomość Qt jest wystarczająca, aby szukać pracy?
Prócz tego jeszcze tworzyłem sobie apke przypominającą pokazującą dymki w lewym dolnym rogu. Przeczytałem też dwie książki o Qt, "C++ Wykorzystaj potęgę aplikacji graficznych" i "C++ i Qt. Wprowadzenie do wzorców projektowych"
@Chris-Kawa Dzięki, faktycznie na pierwszej liście "Zmienne użytkowników" były stare i nowe ścieżki wiec stare usunąłem. Na drugiej liście "Zmienne sytemowe" nie ma nic o Pythonie więc nic nie ruszam. Dla pewności restartuje komputer i gdy odpalam Qt to on nadal woła o starą ścieżkę dostępu choć w zmiennych środowiskowych jej już nie ma a jest tam tylko nowa czyli tylko prawidłowa. Rozumiem z tego (choć się nie znam) że Qt sobie gdzieś zapamiętał błędną ścieżkę i trzyma się tego zapamiętale.
Niestety, nic mi to nie mówi, nie spotkałem dotąd takiego problemu. Także mogę tylko zgadywać.
Co może pomóc:
jeśli Qt jest zainstalowane w jakiejś nietypowej lokalizacji, może pomoże uruchomienie Qt Creatora jako administrator? Ogolnie to jest zly pomysł, żeby działać jako admin, ale choćby dla zdiagnozowania problemu można spróbować
sprawdź w opcjach Qt Creatora (zakladka Kits) czy kompilator, Qt i kit nie zgłaszają żadnych błędów
Ctrl + O i wybierz plik CMakeLists.txt z głównego folderu trowjego projektu. Qt Creator potrafi zaladować instniejące buildy (jeśli jakieś są).
Jeśli wyświetli się tylko sam plik CMakeLists.txt, to znaczy że wystąpil jakis błąd. Wtedy otwórz zakładkę (na dole) "General Messages" i sprawdź co poszło nie tak. I jak coś pytaj dalej, może pomogę :-) Nie znam za dobrze cmake.
Hi, don't use semicolons in connect(), try change to
connect(load_game, SIGNAL (released()), this, SLOT (start_load_game()));
connect(new_game, SIGNAL (released()), this, SLOT (start_new_game()));