Qt - Kolejność wykonywanych lini kodu.

Qt - Kolejność wykonywanych lini kodu.
PoziomeQ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 133
0

cześć. mam taki kod:

Kopiuj
ka::ka(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ka)
{
 ui->setupUi(this);

    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    go();
    
}

chciałbym aby ui programu pokazywało się najpierw więc dałem ui->setupUi(this); na jako pierwszą funkcję wykonywaną w kodzie.
jednak pierwsza wykonuje się funkcja go();
chcę aby funkcja go(); rozpoczęła swoją pracę zaraz po włączeniu ui. proszę o pomoc
z góry dzięki :)

  • Rejestracja: dni
  • Ostatnio: dni
0

A nie tak:

Kopiuj
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
 ui->setupUi(this);
 
    go();
  • przebuduj projekt
PoziomeQ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 133
0

niestety nie udało się.
funkcja go nadal wykonuje się przed pojawieniem się okienka z programem

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Ponieważ wykonanie się konstruktora nie oznacza że okienko pojawiło się na ekranie.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 353
0

Bo w klasie jest budowane okno. Wyswietlanie jest w mainie, gdzie utworzony jest obiekt MainWindow i wywolana metoda show.

PoziomeQ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 133
0

czyli co mam zrobić żeby funkcja wykonała się po pojawieniu się okienka ?

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Przenieść jej wywołanie za linię z kodem odpowiedzialnym za wyświetlenie okna.

tomepaw
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin
  • Postów: 218
0

Przecież funkcja go() jest wywoływana z konstruktora, czyli zanim jeszcze obiekt na dobre powstanie. Odpal funkcję za pomocą timera.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Zrób z go() slota i go uruchom timerem po jakimś opóźnieniu.

Kopiuj
QTimer::singleShot(300, this, SLOT(go()));

Tak jak piszą koledzy, w konstruktorze budowana jest struktura danych. Dopiero, gdy ma wystartować główny event loop okno jest pokazywane.
Poza tym może wystarczy jak poczytasz to: http://qt-project.org/doc/qt-4.8/QSplashScreen.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.