Strona 1 z 1

[QT][C++] Problem z dostepem do zmiennej z innej klasy?

: 14 gru 2010, 18:38
autor: hardtmuth
Przyznam, ze w c++ programowalem ponad 5 lat temu. Korzystam jedynie z C, dlatego klasy troche mnie irytuja w tej chwili.

Mam klase odpowiadajaca za komunikacje po rs232, jest tam fcja odpowiadajaca za odbior danych, po otrzymaniu odpowiednich danych (otrzymuje je, sprawdzilem to) wywoluje f-cje, ktora ma za zadanie zaktualiozowac cos w GUI.

Wyglada to tak:

te dwie linijki sa wykonywane po odebraniu odpowiednich danych. W datetime pojawia sie data. win to klasa mainwindowimpl

datetime = QDateTime::fromString("25-12-2010 12:55:23","dd-MM-yyyy hh:mm:ss");
win.update_gun_dt(datetime);

ustawiam breakpointa w funkcji update_gun_dt i widac, ze program wchodzi do niej, w przekazanej zmiennej jest datetime. Wszystko sie ladnie zgadza.

Nastepnie w niniejszej f-cji wykonywane jest:

void MainWindowImpl::update_gun_dt(QDateTime a)
{
QString b = a.toString("hh:mm:ss");
QString c = a.toString("dd-MM-yyyy");

//gun_t_label->setText("lalab");
//gun_d_label->setText("nacisnalem");
gun_d_label->setText(c);
}

I teraz zaczyna sie problem. W GUI w ogole nie nastepuje aktualizacja tego label`a. Nawet jesli recznie wpisze jakis tekst, tak jak ponizej widac llab czy nacisnalem. Nic sie nie wyswietla. Puste pole.

Najsmieszniejsze jest to, ze obok w klasie win (mainwindowimpl) mam funkcje, ktora z timera (slot) wykonywana jest co 1 s (aktualizuje czas systemowy wyswietlany w gui). Jesli w niej wpisze wywolanie:
gun_d_label->setText("nacisnalem");

Pole sie aktualizuje. Gdzie robie cos nie tak, gdybym mial problem z private/public czesci skladowych klasy to chyba by kompilator krzyczal?

Dodatkowo zauwazylem, ze mam:
zmienna w klasie glownej o nazwie QDateTime akt_time
modyfikuje ja wlasnie w tej funkcji update, po wyjsciu update ta zmienna ma znowu 0. Dlaczego tak sie dzieje?

Odp: [QT][C++] Problem z dostepem do zmiennej z innej klasy?

: 16 gru 2010, 08:46
autor: mikolajs
Do głowy przychodzą mi tylko banalne błędy:
-pomyliłeś nazwę obiektu QLabel
-gdzieś dalej usuwasz to co wpisałeś
-usuń dla pewności plik obiektowy okienka przed kompilacją - czasem zdarza się że qmake nie wykrywa zmian
Nic więcej nie wymyślę bez kodu :)