Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ant_studio от Март 15, 2008, 21:42



Название: Вопрос про QPushButton
Отправлено: ant_studio от Март 15, 2008, 21:42
Доброго времени суток!

Подскажите пожалуйста, как в цикле создать некое число кнопок с разными именами и тамже создать коннекты на эти кнопки???


Название: Re: Вопрос про QPushButton
Отправлено: ритт от Март 15, 2008, 21:57
пример из ассистанта:

Код:
     signalMapper = new QSignalMapper(this);

     QGridLayout *gridLayout = new QGridLayout;
     for (int i = 0; i < texts.size(); ++i) {
         QPushButton *button = new QPushButton(texts[i]);
         connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
         signalMapper->setMapping(button, texts[i]);
         gridLayout->addWidget(button, i / 3, i % 3);
     }

     connect(signalMapper, SIGNAL(mapped(const QString &)),
             this, SIGNAL(clicked(const QString &)));

     setLayout(gridLayout);

стыдно должно быть такие вопросы задавать!


Название: Re: Вопрос про QPushButton
Отправлено: ant_studio от Март 15, 2008, 22:11
xep
Ты знаешь - мне очень стыдно - но я только начинаю осваивать и Qt и С++
И поэтому мне очень трудно!

Ты не мог бы привести простой пример не из асистента?
А то с этим примером мне пока туговато!



Название: Re: Вопрос про QPushButton
Отправлено: ритт от Март 15, 2008, 22:49
в разделе общих вопросов есть ветка, посвящённая чтиву по кутям - как начинающим, так и продвинутым будет полезно

а по теме - что именно непонятно? сигналмаппер? лэйуоты? пример ведь тривиальный...


Название: Re: Вопрос про QPushButton
Отправлено: ant_studio от Март 15, 2008, 22:52
Может я не очень точно выразил мысль:
Создать в цикле кнопки с разными именами - это не означало создать кнопки с разными надписями на них, Я имел в виду разные ObjectName  - например QPushButton *btn1, QPushButton *btn1, ..., QPushButton *btn_n.


Название: Re: Вопрос про QPushButton
Отправлено: ритт от Март 15, 2008, 23:57
btn1 - это не обжетНэйм, а имя переменной...совсем неточно выразил мысль

ну, давай сделаем так:
Код:
     signalMapper = new QSignalMapper(this);
     QList<QPushButton *> buttonList;

     QGridLayout *gridLayout = new QGridLayout;
     for (int i = 0; i < texts.size(); ++i) {
         QPushButton *button = new QPushButton(texts[i]);
         button->setObjectName(QString("btn%1").arg(i));
         connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
         signalMapper->setMapping(button, texts[i]);
         gridLayout->addWidget(button, i / 3, i % 3);
         buttonList.append(button);
     }

     connect(signalMapper, SIGNAL(mapped(const QString &)),
             this, SIGNAL(clicked(const QString &)));

     setLayout(gridLayout);
будут тебе и обжектНэйм отличаться, и указатели в списке


Название: Re: Вопрос про QPushButton
Отправлено: ant_studio от Март 16, 2008, 00:13
А это единственный вариант???
Нет ничего без создания дополнительных классов?

может будет лучше если я напишу что я хочу получить:

есть ini файл - в нем:

Калькулятор=calc.exe
Консоль=cmd.exe

программа читает этот файл и создает кнопки для вызова этих программ
то что до знака =   --- надпись на кнопке
         после знака =   --- путь до .exe файла

считываю файл по-строчно с помощью цикла do{}while{}

вот от куда у меня такой вопрос
что на каждую строку нужно сделать кнопку и к ней коннект для запуска программ


Название: Re: Вопрос про QPushButton
Отправлено: ритт от Март 16, 2008, 03:39
я не пойму - где дополнительные классы?

Код:
     class WhiteRabbit: public QObject
     {
           Q_OBJECT

     public slots:
           void follow(const QString &path)
           {
                  //получил свой путь? - ищи крольчишку
           }
      }

//....

     QMap<QString, QString> textsMap;
     textsMap.insert("Калькулятор", "calc.exe");
     textsMap.insert("Консоль", "cmd.exe");

     signalMapper = new QSignalMapper(this);

     QHBoxLayout *layout = new QHBoxLayout;
     for(QMap<QString, QString>::ConstIterator it = textsMap.constBegin(); it != textsMap.constEnd(); ++it)
     {
         QPushButton *button = new QPushButton(it.key());
         connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
         signalMapper->setMapping(button, it.value());
         layout->addWidget(button);
     }

     WhiteRabbit* whiteRabbit = new WhiteRabbit;
     connect(signalMapper, SIGNAL(mapped(const QString &)), whiteRabbit, SLOT(follow(const QString &)));

з.ы. как разберёшься с темой, удали ветку - никуда не годится такую чушь здесь разводить


Название: Re: Вопрос про QPushButton
Отправлено: lit-uriy от Март 17, 2008, 09:24
что на каждую строку нужно сделать кнопку и к ней коннект для запуска программ
Начни с изучения Qt'явого примера "калькулятор"
там генерится в цикле куча кнопок, подправишь под себя, для начала нормально