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

QT - Przyznawanie atrybutu ~100 obiektom

VPS Starter Arubacloud
0 głosów
138 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez MatrixBMW Początkujący (360 p.)

Witam, załóżmy że tworzę sapera, losuję 10 liczb na ~100, na których będą bomby. Mam 100 pushbuttonów, które są polami. Czy mogę jakoś zautomatyzować proces przyznawania polom bomb inaczej niż po prostu np.

switch(wylosowana_liczba){
case 1: ui->button1->setWhatsThis("bomb");
case 2: ui->button2->setWhatsThis("bomb");
//...
case 99: case 1: ui->button99->setWhatsThis("bomb");

 

2 odpowiedzi

+1 głos
odpowiedź 16 kwietnia 2019 przez Bondrusiek Maniak (61,370 p.)
wybrane 16 kwietnia 2019 przez MatrixBMW
 
Najlepsza

Witam,

możesz to zrobić na dwa sposoby. Pierwszym jest użycie czystego kodowania bez QtDesignera i stworzenie tablic dla QPushButton'ów.

    QPushButton* theButtons[100];
    for(int i = 0; i < 100; ++i){
        theButtons[i] = new QPushButton();
        theButtons[i]->setWhatsThis("bomb");
    }

Z tego co widzę używasz forumalarz z QtDesignera. Można również to zrobić tak. Zobacz w formularzu jaki jest Twój główny widget(jego dokładna nazwa) z którego chcesz pobrać buttony. Przykład:

    QList<QPushButton*> list = ui->Widget->findChildren<QPushButton*>();

    for(int i = 0; i < list.count(); ++i)
    {
        list.at(i)->setWhatsThis("bomb");
    }

 

komentarz 16 kwietnia 2019 przez MatrixBMW Początkujący (360 p.)

Witam, użyłem drugiego sposobu, ale trochę go zmodyfikowałem. Nazwałem QPushButtony od b1 do b81  i losuję liczbę z zakresu (1,81), a następnie stosuję coś takiego:

list.at(losowaWartosc)->setWhatsThis("bomb");

 Problem jest taki, że te widgety nie są posegregowane w żaden sposób np. gdy losowaWartosc=21 to zmianie ulega np. b52. Mogę w jakiś sposób zrobić to tak, aby gdy wylosuję wartość 21 to zmianie ulegnie b21?

komentarz 16 kwietnia 2019 przez Bondrusiek Maniak (61,370 p.)

Witam,

możesz to wykonać w taki sposób. Możesz to ulepszyć:

    for(int i = 0; i < list.count(); ++i)
    {
        if ( list.at(i)->objectName().indexOf(QString::number(losowaWartosc)) != -1 )
        {
            list.at(i)->setWhatsThis("bomb");
        }
    }

 

komentarz 16 kwietnia 2019 przez MatrixBMW Początkujący (360 p.)
Wszystko jest OK tylko problem jest taki, że atrybut "bomb" (gdy losowa liczba wynosi np. 3) otrzymują wszystkie buttony z 3 w nazwie np. 3, 13, 23, 30,31... itp. a chciałbym, żeby gdy losowaliczba=3 tylko jeden button otrzymywał ten atrybut tj. b3.
komentarz 16 kwietnia 2019 przez Bondrusiek Maniak (61,370 p.)

To wsadź do metody indexOf

QString = "b" + QString::number(losowaWartosc);

co odpowiada nazwie widgetu.

0 głosów
odpowiedź 16 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Może zrobić tablicę button'ów?
komentarz 16 kwietnia 2019 przez MatrixBMW Początkujący (360 p.)
W jaki sposób mogę dodać już istniejący przycisk do tablicy? W internecie znajduję tylko tworzenie nowych QPushButtonów, a samemu nie mogę jakoś do tego dojść.
komentarz 16 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Niemógłbyś tworzyć ich od razu w tablicy?

Podobne pytania

0 głosów
0 odpowiedzi 85 wizyt
+1 głos
0 odpowiedzi 131 wizyt
0 głosów
0 odpowiedzi 109 wizyt
pytanie zadane 28 grudnia 2022 w C i C++ przez M1983 Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...