Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 63
1

Объединение сигналов

02.02.2016, 13:21. Показов 1736. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо объединить две галочки Инверсия и Верхний регистр. См. изображения. По отдельности все работает.
Описание методов :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class str: public QObject 
{ 
Q_OBJECT 
 
public slots: 
void Simple(QString str) 
{ 
QMessageBox msg; 
msg.setText(str); 
msg.exec(); 
} 
void Inversia(QString str) 
{ 
QString result = str; 
for(int i=str.size()-1,j=0; i>=0; i--,j++) 
{ 
result[j] = str[i]; 
} 
QMessageBox msg; 
msg.setText(result); 
msg.exec(); 
} 
void Registr (QString str) 
{ 
QString str1 ; 
str1=str.toUpper(); 
 
QMessageBox msg; 
msg.setText(str1); 
msg.exec(); 
} 
};
Конектится все главном исходнике:
C++
1
2
3
QObject::connect(window,SIGNAL(Simple(QString)),n,SLOT(Simple(QString))); 
QObject::connect(window,SIGNAL(Invers(QString)),n,SLOT(Inversia(QString))); 
QObject::connect(window,SIGNAL(Register(QString)),n,SLOT(Registr(QString)));
И вызывается в созданном исходнике:
C++
1
2
3
4
5
6
7
8
9
10
11
void MyWindow::OkClicked() 
{ 
if(!cb1->isChecked() && !cb2->isChecked()) 
emit Simple(line->text()); 
if(cb1->isChecked()) 
emit Register(line->text());//вызов 
if(cb2->isChecked()) 
emit Invers(line->text()); 
// if(cb1->isChecked() && cb2->isChecked()) 
// ??? 
}
Получается надо добавить как то условие, что при нажатии двух галочек будут вызываться два сигнала одновременно, как это реализовать?
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2016, 13:21
Ответы с готовыми решениями:

Создание сигналов
Помогите пожалуйста разобраться с созданием сигналов в qt. Я не могу понять, как при создании...

Deadlock из-за сигналов
У меня есть программа, в которой есть потокобезопасный менедежер. Менеджер имеет сигналы. Из-за...

Быстродействие сигналов и слотов
В документации сказано: В ДЕСЯТЬ раз!!!!11 Почему так много? Ведь соответствие сигнатур...

Концепция сигналов и слотов
Часто, когда просматриваю проекты, написанные другими программистами, встречаю примерно такое: ...

6
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
02.02.2016, 14:24 2
Цитата Сообщение от Анна Протасова Посмотреть сообщение
при нажатии двух галочек будут вызываться два сигнала одновременно, как это реализовать?
Никак.
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
02.02.2016, 14:34 3
Можна оба чекбокса посадить на один слот. Не то?
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
02.02.2016, 14:52 4
Цитата Сообщение от Анна Протасова Посмотреть сообщение
Получается надо добавить как то условие, что при нажатии двух галочек будут вызываться два сигнала одновременно, как это реализовать?
Не понял вопрос. Если вам нужно посылать два сигнала от обоих чекбоксов, не важно каких из них изменился - то никак. А если и извратиться, то это быдлокод.

Сделайте чтобы оба чекбокса вызывали один общий слот, который бы создавал структуру с текущим состоянием галок, и уже эту структуру отправляйте обработчик.
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 63
02.02.2016, 15:29  [ТС] 5
может быть
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
02.02.2016, 15:45 6
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Сделайте чтобы оба чекбокса вызывали один общий слот
а в этом слоте выполнялись действия, только если включены оба чекбокса.
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 63
02.02.2016, 16:45  [ТС] 7
сразу извиняюсь за неграмотность, пару дней изучаю..
как я делаю
общий слот :
C++
1
2
3
4
5
void Common1 (QString str) 
{ 
Registr(str); 
Inversia(str); 
}
Условие - если выбраны оба чекбокса, вызываем сигнал:
C++
1
2
if(cb1->isChecked() && cb2->isChecked()) 
emit Common(line->text());
дополняю главный исходник:
C++
1
QObject::connect(window,SIGNAL(Common(QString)),n,SLOT(Common1(QString)));
работает по очереди, сначала большие буквы, потом инверсия отдельно

Добавлено через 21 минуту
Нашла свою ошибку, всем спасибо за советы! Дело было в выводе от каждого метода сообщения
C++
1
2
3
QMessageBox msg; 
msg.setText(str1); 
msg.exec();
0
02.02.2016, 16:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2016, 16:45
Помогаю со студенческими работами здесь

Использование сигналов и слотов
Каким образом засчет сигналов и слотов можно запустить нужную функцию при запуске главной формы?...

Надёжность сигналов-слотов
Всем привет! Представьте Программа, выполняющая сканирование сайтов на предмет обновлений...

Связывание сигналов и слотов
Приветствую! Возникла проблема со связыванием сигнала и слота. Есть класс-приемник(MainWindow) и...

Одновременная обработка сигналов обьектом
Добрый день. Наткнулся на проблему следующего характера: если в произвольный момент времени...

Не работает Инструмент сигналов-слотов
Вроде бы, что может быть легче чем сигналы и слоты, но, вот оно что: У меня есть два файла (на...

Использование слотов и сигналов в потоках
Всем здравствуйте. Изучал qt потоки и слоты отдельно, вроде всё понятно и работет, но если я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru