Russian Qt Forum

Qt => Общие вопросы => Тема начата: Skala от Февраль 15, 2007, 11:13



Название: Подскажите, как лучше сделать обработку кнопок?
Отправлено: 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 от Февраль 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 от Февраль 15, 2007, 11:54
Спасибо!
Только я пока не понял: Один str ставитс несколько кнопок и они будут видны? Читая код, полагаю, что да. Позже проверю. Еще раз - огромное Спасибо за помощь!


Название: Подскажите, как лучше сделать обработку кнопок?
Отправлено: Alex Custov от Февраль 15, 2007, 12:12
Цитата: "Skala"
Спасибо!
Только я пока не понял: Один str ставитс несколько кнопок и они будут видны?


Изучайте С++ ;) Главное, что вы создаёте новые объекты. Где будут храниться указатели на них в данном примере не важно, поэтому можно юзать один локальный указатель.