Russian Qt Forum

Qt => Вопросы новичков => Тема начата: User162 от Март 04, 2012, 19:11



Название: Вопрос о QPushButton (toggle)
Отправлено: User162 от Март 04, 2012, 19:11
Всем привет. Проблема вот какая:
Есть форма. На форме создаются 10 кнопок. Кнопки имеют состояние Checkable(true). Задача состоит в том, чтобы вывести (например в текст браузер) номер нажатой кнопки и её состояние вкл или выкл.
Прочитав статью http://qt.osdn.org.ua/signalmapper.html (http://qt.osdn.org.ua/signalmapper.html), я подумал, что для этой цели мне подойдет QSignalMapper. Но как потом оказалось в нём можно передавать только один параметр (в моём случае это номер кнопки).
Вот код
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    signalMapper = new QSignalMapper(this);
    for (int i = 0; i < 5; i++)
    {
        QPushButton *Button = new QPushButton;
        ButtonCam->setCheckable(true);
        connect(Button , SIGNAL(toggled(bool)), signalMapper, SLOT(map()));
        signalMapper->setMapping(Button, QString::number(i));

        ui->gridLayout->addWidget(Button,i,1);
    }
    connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(check(const QString &)));
}

void MainWindow::check(const QString &NumButt)
{
         ui->textBrowser->append(NumUbp);// хотелось бы ui->textBrowser->append(NumButt+"Состояние " +Sost)
}


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



Название: Re: Вопрос о QPushButton (toggle)
Отправлено: BRE от Март 04, 2012, 19:16
Храни указатели на все кнопки и при получении номера кнопки, доставай указатель и проверяй состояние.


Название: Re: Вопрос о QPushButton (toggle)
Отправлено: Kurles от Март 04, 2012, 20:13
Я бы использовал
Код
C++ (Qt)
bool QObject::setProperty ( const char * name, const QVariant & value )
QObject * QObject::sender () const [protected]

В конструкторе
Код
C++ (Qt)
for (int i = 0; i < 5; i++)
   {
       QPushButton *Button = new QPushButton;
       Button->setCheckable(true);
       Button->setProperty("NumOfButton", i);
       connect(Button , SIGNAL(toggled(bool)), this, SLOT(onButtonToggled(bool)));
       ui->gridLayout->addWidget(Button,i,1);
   }

в слоте onButtonToggled(bool):
Код
C++ (Qt)
   if (!sender()) return;
   QPushButton *button = qobject_cast<QPushButton*> (sender());
   int numOfButton = button->property("NumOfButton").toInt();
   //.....


Название: Re: Вопрос о QPushButton (toggle)
Отправлено: Странник от Март 04, 2012, 20:40
Kurles, а зачем в QPushButton кастить? property и у QObject можно прекрасно прочитать.


Название: Re: Вопрос о QPushButton (toggle)
Отправлено: Vass от Март 04, 2012, 21:25
Если кнопки на одной форме сгруппируй их с помощью QButtonGroup она умеет сигналы по индексу. и может возвратить состояние кнопки по индексу.