Qt - optymalizacja kodu

0

Witam, piszę do was z zapytaniem, o zasugerowanie mi jak mógłbym z optymalizować kod programu, na razie rozchodzi mi się o QCheckBox. Mam ich w programie prawie 60. Nie tworzę ich w Designerze tylko od razu w kodzie. Do każdego checkbox'a potrzebuję 3 linijek aby go stworzyć, ustawić ikonę i rozmiar ikony. I jak można zauważyć (60 * 3) już jest 180 linijek kodu. Jest jakiś sposób aby to zoptymalizować ??

Rozchodzi mi się o te 3 linijki :

nazwaProgramu4 = new QCheckBox("JakasNazwaProgramu");
    nazwaProgramu4 ->setIcon(QIcon(":/icon/icon/programs/ikona-do-jakiegos-programu.ico"));
    nazwaProgramu4 ->setIconSize(QSize(32, 32));

Z góry dzięki

3

Robisz:

std::map<std::string, QCheckBox *> 

(lub jakiś odpowiednik z Qt), i wtedy klucz masz string (np. "nazwaProgramu4"), a wartością jest wskaźnik na QCheckBox.
Dodatkowo nazwę checkboxa, ikonę, i rozmiary ikony trzymasz w jakimś arrayu, i pętlą tworzysz i dodajesz do mapy. Np.:

struct CheckBoxDesc
{
 const char *m_name;
 const char *m_text;
 const char *m_icon;
 unsigned m_icon_w;
 unsigned m_icon_h;
};
const CheckBoxDesc checkboxes[] = {
 { "nazwaProgramu4", "JakasNazwaProgramu", ":/icon/icon/programs/ikona-do-jakiegos-programu.ico", 32, 32 }
 { "nazwaProgramu5", "JakasNazwaProgramu2", ":/icon/icon/programs/ikona-do-jakiegos-programu2.ico", 64, 64 }
 { "nazwaProgramu6", "JakasNazwaProgramu3", ":/icon/icon/programs/ikona-do-jakiegos-programu3.ico", 128, 128 }
 // ...
};
const unsigned numCheckboxes = sizeof(checkboxes) / sizeof(checkboxes[0]);
// ...
for(unsigned i = 0; i < numCheckboxes; ++i)
{
 QCheckBox *checkbox = new QCheckBox(checkboxes[i].m_text);
 checkbox->setIcon(QIcon(checkboxes[i].m_icon));
 checkbox->setIconSize(QSize(checkboxes[i].m_icon_w, checkboxes[i].m_icon_h));
 checkboxMap[checkboxes[i].m_name] = checkbox;
}

0

@mwl4 , dzięki kod działa tylko mam problem z pętlą for dodającą QCheckBox'y do layout'u. Mianowicie podczas kompilacji wyskakuje błąd że znak [ nie może być przed zmienną QString

for(int i = 4; i < 7; i++)
    {
        QString test = "nazwaProgramu" + QString::number(i);
        qDebug() << test;
        layout->addWidget(checkboxMap[test]);
    }
1

Zmienna 'test' jest typu Qstring, a mapę zadeklarowałeś na std::string.

0

@xfin, masz rację wystarczyło zmienić std::string na QString :D

Ale w qt zamiast używać std::map wolę QMap;

QMap<QString, QCheckBox *> checkboxMap;

1 użytkowników online, w tym zalogowanych: 0, gości: 1