• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nazwa obiektu jako zmienna

0 głosów
1,699 wizyt
pytanie zadane 27 kwietnia 2015 w C i C++ przez st4chuu Nowicjusz (210 p.)
Cześć

Robie w QT pewną aplikację i chciałbym hurtowo z pliku wczytyć treści do Labeli i do Buttonów.

normalnie robię to
ui->label1->setText("tekst");

i czy można potraktować nazwę label1 jako zmienną? Tak by w pliku były zapisane wszystkie nazwy labeli i buttonów i program odczytywał by i nazwę i treść.

Z góry dziękuję za wszelką pomoc ;)

5 odpowiedzi

0 głosów
odpowiedź 27 kwietnia 2015 przez Buby Pasjonat (19,590 p.)

A nie możesz zrobić tablicy obiektów? I potem pętlą iterować.

 

Np.

std::string Tekst;
for( int i = 0; i < Rozmiar; ++i )
{
   std::getline( Plik, Tekst );
   ui->label[i]->setText( Tekst );
}


W pliku miałbyś zapisane teksty linia po linii.

 

Albo np. taka wersja, gdzie w pierwszej linii pliku miałbyś ilość obiektów, a w kolejnych liniach tytuły.

komentarz 27 kwietnia 2015 przez st4chuu Nowicjusz (210 p.)
To nie bylo by glupie rozwiązanie, jednak wymagalo by zbudowania praktycznie całego programu od nowa, tam jest już łącznie koło 100 labeli i buttonów. A pozatym Label[1] label[2] mówi nie wiele, podobnie z buttonami. Gdyby to było możliwe wolał bym zostawić z nazwami własnymi. Tzn np startButton itp
komentarz 27 kwietnia 2015 przez Buby Pasjonat (19,590 p.)

To może zaproponję Ci wykorzystać dziedziczenie i stowrzyć własną klasę na bazie labela. Stworzyłbyś w niej składową z nazwą. Wiem, że to tona roboty, więc mam świadomość, że to dość kiepskie rozwiązanie, biorąc pod uwagę potrzebę modyfikacji całego kodu.

P.S nie miałem w życiu styczności z Qt, ale muszę kiedyś przetestować - aplikacje okienkowe pisałem w WinApi, Gtk+, a aktualnie piłuję Gtkmm i piszę własny kurs, jeszcze z tydzień i zacznę wrzucać na bloga. [taka tam reklama devil]

0 głosów
odpowiedź 27 kwietnia 2015 przez hit02 Nałogowiec (33,970 p.)

Nazw nie możesz traktować jako zmiennych. Możesz użyć wskaźników, ale pamiętaj, że adresy mogą się zmienić po restarcie komputera, węc nie zapisuj ich do pliku. smiley Możesz chyba stworzyć tablice Buttonów i wczytywać po kolei do karzdego. W tedy dane nie powinny się pogubić.

komentarz 27 kwietnia 2015 przez st4chuu Nowicjusz (210 p.)
Mam plik csv w którym zapisuje nazwę wszystkich butonów labeli itd oraz to co ma być w nich wyświetlone.
Chciałem przy uruchomieniu odpalić funkcję która dla danej nazwy buttonu/labela wczytała by konkretną treść. Od biedy, można zrobić to na piechotę, liczyłem jednak, że znajdzie się jakieś wygodne rozwiązanie :P
komentarz 27 kwietnia 2015 przez hit02 Nałogowiec (33,970 p.)
C++ nie umieszcza nazw w binarce. Możesz zrobić jakieś strukturki przechowujące nazwy i funcję zwracającą adres po podaniu jej nazwy, tylko po co? Program bardzo się skomplikuje, spowolni i zajmie więcej pamięci.
0 głosów
odpowiedź 27 kwietnia 2015 przez jeremus Maniak (59,720 p.)
teoretycznie powinno to byc możliwe przy użyciu preprocesora ( #DEFINE )

ale lepiej posłuchaj rad kolegów - tablice obiektów to bardziej eleganckie rozwiązanie
komentarz 27 kwietnia 2015 przez st4chuu Nowicjusz (210 p.)
ok a pozwolę sobie zapytać. Jak zrobić taką tabicę? Pytanie może głupie, jednak dotychczas po prostu przesuwałem kontrolki z toolboxa i nie przejmowałem się tym jak one się implementują, a tutaj jak to przerobić do tabeli?

Dziekuję za wszelką pomoc
0 głosów
odpowiedź 28 kwietnia 2015 przez st4chuu Nowicjusz (210 p.)
A co myslicie o rozwiązaniu takim, że do wszystkich buttonów labeli itp zrobił bym tablice która była by wskaźnikami do konkretnych obiektów? Tzn na widoku były by przyciski z nazwami a na potrzeby podmiany treści zmieniana było by ona za pośrednictwem wskaźników, każdemu z elementów przypisać wskaźnik z tablicy. Z pliku CSV oczytywany byl by nr ID labela czy tezButtona  a następnie z kolejnej kolumny wczytywana tresć np. label[ID]->setText("tresc")

 

przepraszam za ewentualne błędy w nazewnictwie
0 głosów
odpowiedź 28 kwietnia 2015 przez jeremus Maniak (59,720 p.)

Myśle że to może załatwić temat :

Pętla po obiektach określonego typu.

To  jest co prawda przykład dla C++Borlanda, ale w QT powinno wygladac podobnie.

http://stackoverflow.com/questions/2391325/bcb-how-to-iterate-over-controls-on-a-form

Podobne pytania

+1 głos
4 odpowiedzi 4,664 wizyt
pytanie zadane 16 kwietnia 2015 w C i C++ przez M4tthew Gaduła (4,480 p.)
0 głosów
1 odpowiedź 717 wizyt
pytanie zadane 27 czerwca 2022 w C i C++ przez sushi2021 Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 373 wizyt
pytanie zadane 20 stycznia 2019 w C i C++ przez niezalogowany

93,743 zapytań

142,683 odpowiedzi

323,299 komentarzy

63,330 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...