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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите, как лучше сделать обработку кнопок?  (Прочитано 3877 раз)
Skala
Гость
« : Февраль 15, 2007, 11:13 »

Нужно сделать несколько однотипных кнопок, отличающихся не только названием, но и дополнительной строчкой
Цитировать
class Strings : public QPushButton
{
    Q_OBJECT

public:
    Strings(const QString & text, QWidget * parent, Qstring & commands);
private:
QString commands;
};

Strings::Strings(const QString & text, QWidget * parent, Qstring & commands)
    : QPushButton (text,parent)
{
this->commands = commands;
}
(кстати, код не проверял, пишу на совсем виндовой машине) - Можно было бы сделать через QComboBox и в списке строку commands записать через userData, но мне нужны именно кнопки.
И теперь думаю, как организовать обработку кнопок: Кнопок будет шесть, делать их членами класса окна, на которые их помещаю, не хочется - в момент создания окна делаю
Цитировать
QGroupBox *stringsGroup = new QButtonGroup(tr("Strings"));
 Strings *str1 = new Strings("&1 Vriant",this,"some commands");
 stringsGroup->addButton(str1,1);//id
    layout->addWidget(stringsGroup, 2, 0);

И теперь вопрос: как лучше сделать обработку кнопок-
1) Eсли через слоты, то нужно знать объект sender, что бы от него попросить commands - Как это сделать?
2) Если через обработку нажатия кнопки, то нужно иметь доступ к процедурам/данным родителя - тоже непонятно - это всех передружить надо?  :?:
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Февраль 15, 2007, 11:35 »

Код:


void Class::initClass()
{
    QGroupBox *stringsGroup = new QButtonGroup(tr("Strings"));
    Strings *str;

    str = new Strings("&1 Vriant",this,"some commands");
    stringsGroup->addButton(str,1);//id
    connect(str, SIGNAL(clicked()), this, SLOT(slotButtonPressed()));

    str = new Strings("&2 Vriant",this,"some commands2");
    stringsGroup->addButton(str,2);//id
    connect(str, SIGNAL(clicked()), this, SLOT(slotButtonPressed()));

    str = new Strings("&3 Vriant",this,"some commands3");
    stringsGroup->addButton(str,3);//id
    connect(str, SIGNAL(clicked()), this, SLOT(slotButtonPressed()));

    layout->addWidget(stringsGroup, 2, 0);
}

void Class::slotButtonPressed()
{
      Strings *s = dynamic_cast<Strings *>(sender());

      s->...
}


?
Записан
Skala
Гость
« Ответ #2 : Февраль 15, 2007, 11:54 »

Спасибо!
Только я пока не понял: Один str ставитс несколько кнопок и они будут видны? Читая код, полагаю, что да. Позже проверю. Еще раз - огромное Спасибо за помощь!
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Февраль 15, 2007, 12:12 »

Цитата: "Skala"
Спасибо!
Только я пока не понял: Один str ставитс несколько кнопок и они будут видны?


Изучайте С++ Подмигивающий Главное, что вы создаёте новые объекты. Где будут храниться указатели на них в данном примере не важно, поэтому можно юзать один локальный указатель.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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