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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сигналы и слоты  (Прочитано 7079 раз)
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 слота, а вот как сделать под мой вариант - никак не пойму
Записан
Bepec
Гость
« Ответ #1 : Апрель 26, 2012, 17:44 »

Зачем тебе сигналы тогда? Просто сделай 10 слотов. И счётчик. усё.
Записан
ArhiZhek
Гость
« Ответ #2 : Апрель 26, 2012, 17:59 »

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

не судите строго - я токо изучаю Qt, поэтому делаю как по проще
Записан
alexis031182
Гость
« Ответ #3 : Апрель 26, 2012, 18:21 »

Здесь было бы удобно State Machine Framework использовать
Записан
ArhiZhek
Гость
« Ответ #4 : Апрель 26, 2012, 18:51 »

Здесь было бы удобно State Machine Framework использовать
к сожалению это слишком сложно Непонимающий
Записан
iroln
Гость
« Ответ #5 : Апрель 26, 2012, 19:28 »

Здесь было бы удобно State Machine Framework использовать
к сожалению это слишком сложно Непонимающий
Да ничего сложного. Просто посмотрите пример использования и сделайте так же. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 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;
}
 
Записан
ArhiZhek
Гость
« Ответ #7 : Апрель 26, 2012, 20:17 »

но тут-то он работает только в одном void?
вот что я задумал:
Код:
connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(exportToExcel()));
    connect(ui->pushButton_2, SIGNAL( clicked() ), SLOT(dannie()));
то есть надо чтоб вызывался новый void после нажатия клавиши пользователем
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 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 ну, мягко говоря, упрощенная
Записан
ArhiZhek
Гость
« Ответ #9 : Апрель 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()));
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 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)
Записан
ArhiZhek
Гость
« Ответ #11 : Апрель 26, 2012, 21:12 »

ок! благодарю за помощь! все работает
« Последнее редактирование: Апрель 26, 2012, 21:16 от ArhiZhek » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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