Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ArhiZhek от Апрель 26, 2012, 17:08



Название: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 17:08
объясните пожалуйста как сделать, чтоб одним сигналом (поочередным нажатием одной клавиши pushButton) вызывались 10 слотов тоже поочередно, т.е. 1нажатие - срабатывает 1 слот, 2 нажатие - срабатывает 2 слот и т.д.
я думаю, что нужно использовать цикл (счетчик нажатий), если я прав, то как его реализовать?

Один сигнал может быть соединен со многими слотами:
Код:
connect(pushButton, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(pushButton, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));

тут будут одновременно с нажатием pushButton вызываться 2 слота, а вот как сделать под мой вариант - никак не пойму


Название: Re: сигналы и слоты
Отправлено: Bepec от Апрель 26, 2012, 17:44
Зачем тебе сигналы тогда? Просто сделай 10 слотов. И счётчик. усё.


Название: Re: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 17:59
в общем идея такая: есть программа(наподобие калькулятора), все числа которые она посчитала перекидываются в эксель, получается некая табличка, потом она посчитала 2ой раз и снова надо перекинуть в ексель, но на этот раз надо построить 2ю таблицу ниже, так вот в 10 слотах я описал привязки к ячейкам(10 будущих таблиц - некие формы получились) теперь мне надо одним pushButton поочередно заполнять эти таблицы, т.е. поочередно вызывались 10 слотов...

не судите строго - я токо изучаю Qt, поэтому делаю как по проще


Название: Re: сигналы и слоты
Отправлено: alexis031182 от Апрель 26, 2012, 18:21
Здесь было бы удобно State Machine Framework (https://qt-project.org/doc/qt-4.8/statemachine-api.html) использовать


Название: Re: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 18:51
Здесь было бы удобно State Machine Framework (https://qt-project.org/doc/qt-4.8/statemachine-api.html) использовать
к сожалению это слишком сложно ???


Название: Re: сигналы и слоты
Отправлено: iroln от Апрель 26, 2012, 19:28
Здесь было бы удобно State Machine Framework (https://qt-project.org/doc/qt-4.8/statemachine-api.html) использовать
к сожалению это слишком сложно ???
Да ничего сложного. Просто посмотрите пример использования и сделайте так же. :)


Название: Re: сигналы и слоты
Отправлено: Igors от Апрель 26, 2012, 19:36
Ну и чего Вы мнетесь, делайте тот счетчик, напр
Код
C++ (Qt)
connect(pushButton, SIGNAL(clicked()), this, SLOT(BtnClicked()));
 
// slot
void MainWindow::BtnCkicked( void )
{
switch (mClickCount) {
 case 0:
  spintBox->setValue(..);
  break;
 
 case 1:
  updateStatusBarIndicator(..);
  break;
}
++mClickCount;
}
 


Название: Re: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 20:17
но тут-то он работает только в одном void?
вот что я задумал:
Код:
connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
    connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));
то есть надо чтоб вызывался новый void после нажатия клавиши пользователем


Название: Re: сигналы и слоты
Отправлено: Igors от Апрель 26, 2012, 20:33
но тут-то он работает только в одном void?
вот что я задумал:
Код:
connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
    connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));
то есть надо чтоб вызывался новый void после нажатия клавиши пользователем
Ваша цель "обязательно 10 слотов" или "10 действий последовательно"?  :)
Если 10 слотов жизненно необходимы (не знаю зачем) тогда можно так

Код
C++ (Qt)
connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel())); // коннект с первым слотом
 
void MainWindow::exportToExcel( void )
{
...
disconnect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel())); // порываем с первым слотом
connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));   // коннект со вторым слотом
}
 
И так 10 раз. В принципе та же state machine ну, мягко говоря, упрощенная


Название: Re: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 20:47
но теперь он ругается на:
Код:
disconnect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
пишет, что нет соответствующей функции для вызова 'Widget :: disconnect(QPushButton*&, const char*, const char*)'
а это не зависит от того в какое место вставлю эти 2 строчки?
Код:
 disconnect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
     connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));


Название: Re: сигналы и слоты
Отправлено: Igors от Апрель 26, 2012, 21:05
но теперь он ругается на:
Код:
disconnect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
пишет, что нет соответствующей функции для вызова 'Widget :: disconnect(QPushButton*&, const char*, const char*)'
а это не зависит от того в какое место вставлю эти 2 строчки?
Код:
 disconnect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
     connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));
Ошибка не зависит, результат выполнения зависит. Откройте букварь (Assistant) и посмотрите синтаксис вызова disconnect - это гораздо быстрее чем ждать ответа с форума. Вероятно пропущен параметр
Код:
disconnect(ui->pushButton_2, SIGNAL( clicked() ), this, SLOT(exportToExcel()));
Ну или кто-то др вместо this (чей метод exportToExcel)


Название: Re: сигналы и слоты
Отправлено: ArhiZhek от Апрель 26, 2012, 21:12
ок! благодарю за помощь! все работает