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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос о QPushButton (toggle)  (Прочитано 6301 раз)
User162
Гость
« : Март 04, 2012, 19:11 »

Всем привет. Проблема вот какая:
Есть форма. На форме создаются 10 кнопок. Кнопки имеют состояние Checkable(true). Задача состоит в том, чтобы вывести (например в текст браузер) номер нажатой кнопки и её состояние вкл или выкл.
Прочитав статью 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 сигнала на включение и выключение, и в качестве параметра передаёт номер кнопки

Записан
BRE
Гость
« Ответ #1 : Март 04, 2012, 19:16 »

Храни указатели на все кнопки и при получении номера кнопки, доставай указатель и проверяй состояние.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Март 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();
   //.....
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Странник
Гость
« Ответ #3 : Март 04, 2012, 20:40 »

Kurles, а зачем в QPushButton кастить? property и у QObject можно прекрасно прочитать.
Записан
Vass
Гость
« Ответ #4 : Март 04, 2012, 21:25 »

Если кнопки на одной форме сгруппируй их с помощью QButtonGroup она умеет сигналы по индексу. и может возвратить состояние кнопки по индексу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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