Russian Qt Forum
Ноябрь 26, 2024, 11:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про QPushButton  (Прочитано 7515 раз)
ant_studio
Гость
« : Март 15, 2008, 21:42 »

Доброго времени суток!

Подскажите пожалуйста, как в цикле создать некое число кнопок с разными именами и тамже создать коннекты на эти кнопки???
Записан
ритт
Гость
« Ответ #1 : Март 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);

стыдно должно быть такие вопросы задавать!
Записан
ant_studio
Гость
« Ответ #2 : Март 15, 2008, 22:11 »

xep
Ты знаешь - мне очень стыдно - но я только начинаю осваивать и Qt и С++
И поэтому мне очень трудно!

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

« Последнее редактирование: Март 15, 2008, 22:51 от ant_studio » Записан
ритт
Гость
« Ответ #3 : Март 15, 2008, 22:49 »

в разделе общих вопросов есть ветка, посвящённая чтиву по кутям - как начинающим, так и продвинутым будет полезно

а по теме - что именно непонятно? сигналмаппер? лэйуоты? пример ведь тривиальный...
Записан
ant_studio
Гость
« Ответ #4 : Март 15, 2008, 22:52 »

Может я не очень точно выразил мысль:
Создать в цикле кнопки с разными именами - это не означало создать кнопки с разными надписями на них, Я имел в виду разные ObjectName  - например QPushButton *btn1, QPushButton *btn1, ..., QPushButton *btn_n.
Записан
ритт
Гость
« Ответ #5 : Март 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);
будут тебе и обжектНэйм отличаться, и указатели в списке
Записан
ant_studio
Гость
« Ответ #6 : Март 16, 2008, 00:13 »

А это единственный вариант???
Нет ничего без создания дополнительных классов?

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

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

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

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

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

вот от куда у меня такой вопрос
что на каждую строку нужно сделать кнопку и к ней коннект для запуска программ
Записан
ритт
Гость
« Ответ #7 : Март 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 &)));

з.ы. как разберёшься с темой, удали ветку - никуда не годится такую чушь здесь разводить
« Последнее редактирование: Март 16, 2008, 03:52 от Константин » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Март 17, 2008, 09:24 »

что на каждую строку нужно сделать кнопку и к ней коннект для запуска программ
Начни с изучения Qt'явого примера "калькулятор"
там генерится в цикле куча кнопок, подправишь под себя, для начала нормально
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.064 секунд. Запросов: 23.