Подскажите, как лучше сделать обработку кнопок? (Qt - QPushButton)

Модератор: Модераторы разделов

Skala
Сообщения: 241
ОС: Gentoo

Подскажите, как лучше сделать обработку кнопок?

Сообщение Skala »

Нужно сделать несколько однотипных кнопок, отличающихся не только названием, но и дополнительной строчкой
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) Если через обработку нажатия кнопки, то нужно иметь доступ к процедурам/данным родителя - тоже непонятно - это всех передружить надо? :unsure:
Спасибо за внимание.
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Подскажите, как лучше сделать обработку кнопок?

Сообщение Женя Подсыпальников »

Вот как пишет Qt:

Here is one way to connect two of these objects together:
Foo a, b;
connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
b.setValue( 11 );
a.setValue( 79 );
b.value(); // this would now be 79, why?


Соответственно :) ,
в твоём окне - организуем реакцию на щёлк по кнопи:

void CYourWindow::OnButtonClicked(Strings* pcBtnSender) {/* работаем с кнопью-сендером */};

, а в реакции самой кнопи на её щёлк:

void Strings::onClicked/*или как там её ?*/()
{
// спускаем курок:
TranslateClickToWindow(this); // передаём указатель на себя
}


, где:

void Strings::TranslateClickToWindow(Strings*)
{
// пусто, лишь для связи с окном
}


Во процессе инициализации окна,
опосля наклада всех кнопей:

connect(str1, SIGNAL(OnButtonClicked(Strings*)), this, SLOT(TranslateClickToWindow(Strings*)));

Проведи такое соединение от каждой твоей кнопи :)
Пойдём на рыбалку !
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Подскажите, как лучше сделать обработку кнопок?

Сообщение v04bvs »

Спасибо сказали:
Skala
Сообщения: 241
ОС: Gentoo

Re: Подскажите, как лучше сделать обработку кнопок?

Сообщение Skala »

В который раз Вы меня выручаете- большое спасибо!
Спасибо за внимание.
Спасибо сказали: