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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как осуществить передачу нескольких параметров сигналом?  (Прочитано 10203 раз)
palya
Гость
« : Февраль 01, 2016, 11:25 »

Добрый день.
Не понимаю как работать с сигналами. Есть сигнал textChanged() для QLineEdit, он меня устраивает. Я соединяю его с моим слотом и передаю только один параметр - const QString&. А как осуществить передачу нескольких параметров разного типа?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Февраль 01, 2016, 11:32 »

QVariantList, например?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
palya
Гость
« Ответ #2 : Февраль 01, 2016, 11:49 »

То есть от QLineEdit отказаться? А как тогда использовать textChanged()?
Записан
Bepec
Гость
« Ответ #3 : Февраль 01, 2016, 11:49 »

Создать свой сигнал с нужными параметрами и подцепить на соответствующий слот.

Конкретизируйте что вы хотите сделать. Что вы хотите получить в конце?
Записан
palya
Гость
« Ответ #4 : Февраль 01, 2016, 11:56 »

Мне нужен такой сигнал, который реагировал бы так же, как и textChanged(), но посылал бы вместе с QString ещё и два параметра int.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Февраль 01, 2016, 12:12 »

Мне нужен такой сигнал, который реагировал бы так же, как и textChanged(), но посылал бы вместе с QString ещё и два параметра int.
Ну а если
Цитировать
мне нужна такая же ф-ция/метод как вот эта, только с еще 2 параметрами
Как Вы понимаете придется самому ее написать, имеющаяся сама не превратится во что угодно.

С сигналами/слотами то же самое, но в данном случае свою писать вряд ли стоит, т.к. вставить ее вызовы в те же места что и textChanged не удастся - надо менять исходники Qt. Постарайтесь узнать нужные 2 значения др способом. 
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Февраль 01, 2016, 12:24 »

Мне нужен такой сигнал, который реагировал бы так же, как и textChanged(), но посылал бы вместе с QString ещё и два параметра int.

Самое простое и наглядное:
  • Создаете наследника QLineEdit
  • В него добавляете слот для обработки textChanged и сигнал для отправки QString, int, int
  • В конструкторе соединяете textChanged и тот слот
  • В слоте вызываете свой сигнал, добавляя в него нужные параметры
Записан

palya
Гость
« Ответ #7 : Февраль 01, 2016, 12:34 »

Мне нужен такой сигнал, который реагировал бы так же, как и textChanged(), но посылал бы вместе с QString ещё и два параметра int.

Самое простое и наглядное:
  • Создаете наследника QLineEdit
  • В него добавляете слот для обработки textChanged и сигнал для отправки QString, int, int
  • В конструкторе соединяете textChanged и тот слот
  • В слоте вызываете свой сигнал, добавляя в него нужные параметры
А разве так получится? Если я передам сигнал textChanged только с одним параметром, то откуда в дальнейшем возьмутся другие?
Записан
Bepec
Гость
« Ответ #8 : Февраль 01, 2016, 12:44 »

Вы создадите слот в наследнике QLineEdit, который будет вызываться от сигнала textChanged(const &QString), в котором вы будете отправлять созданный же вами сигнал myTextChanged(const &QString, int, int).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Февраль 01, 2016, 12:49 »

... то откуда в дальнейшем возьмутся другие?
Ниоткуда, все равно Вы сами должны их откуда-то взять. Говорите что нужно в этих интах, пока напрасно теряем время
Записан
palya
Гость
« Ответ #10 : Февраль 01, 2016, 13:06 »

Вы создадите слот в наследнике QLineEdit, который будет вызываться от сигнала textChanged(const &QString), в котором вы будете отправлять созданный же вами сигнал myTextChanged(const &QString, int, int).
Цитировать
от сигнала textChanged(const &QString)
- значит только один аргумент попадает в слот в наследнике QLineEdit, а надо чтобы +2.
Цитировать
Говорите что нужно в этих интах
Отправлено: Сегодня в 12:44 Автор: Bepec
Переменные в main, которым присвоены координаты.
Записан
Bepec
Гость
« Ответ #11 : Февраль 01, 2016, 13:32 »

Видимо в 1 раз не дошло, ну да повторю с уточнением
Вы создадите слот в наследнике QLineEdit, который будет вызываться от сигнала textChanged(const &QString), в котором вы будете отправлять созданный же вами сигнал myTextChanged(const &QString, int, int) с параметрами
const &QString - взятый из textChanged
ваши int,int, которые вы инициализируете в мейне.

Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #12 : Февраль 01, 2016, 13:42 »

Что-то вроде такого, набирал в браузере по памяти, но собраться должно Улыбающийся
Код
C++ (Qt)
class MyLineEdit: public QLineEdit {
   Q_OBJECT
 
public:
   MyLineEdit() {
       connect(this, SIGNAL(textChanges(QString)), this, SLOT(textChanges(QString)));
   }
 
private slots:
   void slot_textChanges(QString text) {
       // Что-то делаете, высчитываете a и b
 
       emit myTextChanges(text, a, b);
   }
 
signals:
   void myTextChanges(QString, int, int);
};
 
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Февраль 01, 2016, 13:56 »

Код
C++ (Qt)
   void slot_textChanges(QString text) {
       // Что-то делаете, высчитываете a и b
 
Ну а почему то же самое "что-то" не сделать в теле слота прицепленного на оригинальный textChanged ?
И нехорошо подавать дурной пример начинающим передавая аргументы по значению.

Переменные в main, которым присвоены координаты.
Ну и берите их оттуда как только получили textChanged, напр через extern, сигналы-то тут причем?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #14 : Февраль 01, 2016, 14:03 »

И нехорошо подавать дурной пример начинающим передавая аргументы по значению.

QString достаточно умный, чтобы не по значению передаваться Улыбающийся (где-то читал)
Да я и написал "Что-то вроде такого", а сам автор приводил семантику сигнала с const & QString, так что думаю, сам заменит на константную ссылку Улыбающийся
« Последнее редактирование: Февраль 01, 2016, 14:14 от gil9red » Записан

Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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