[РЕШЕНО] Как передать слоту параметр по ссылке ? |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] Как передать слоту параметр по ссылке ? |
Diem |
10.3.2009, 15:32
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть класс X для примера:
////////////////////// Файл x.h //////////////////////
////////////////////// Файл x.cpp //////////////////////
////////////////////// Файл main.cpp //////////////////////
////////////////////// Вывод ////////////////////// Запуск... value before slot: (1) value in slot: (1, 2) value after slot: (1) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Как сделать чтоб в выводе я получил "value after slot: (1, 2)" ?
Прикрепленные файлы
|
|
|
kwisp |
10.3.2009, 15:36
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
указатель либо ссылка
|
|
|
Diem |
10.3.2009, 15:40
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ну как бы это очевидно.
Но я с c++ дело ооочень давно не имел, Все варианты перепробовал. Либо несовместимость типов либо ещё хрень какая. Пожалуйста если можно на этом примере * и & раставить ? |
|
|
Litkevich Yuriy |
10.3.2009, 15:42
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
LE0N |
10.3.2009, 15:46
Сообщение
#5
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
А почему не * ?
На сколько я знаю, подход с & плохо пахнет ? |
|
|
Litkevich Yuriy |
10.3.2009, 15:47
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Diem |
10.3.2009, 15:49
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: 0 |
Блин совсем запарился.
Всё верно, перепробывав все варианты забыл что и connect должен быть такого вида: connect(this, SIGNAL(exampleSignal(QList<int>&)), this, SLOT(exampleSlot(QList<int>&))); Спасибо. |
|
|
kwisp |
10.3.2009, 15:51
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
А почему не * ? ну сделай указатель точно так же. Блин совсем запарился. Всё верно, перепробывав все варианты забыл что и connect должен быть такого вида: а в консольку не смотрим там небось предупреждение что таких сигналов и слотов нет.... Сообщение отредактировал kwisp - 10.3.2009, 15:51 |
|
|
LE0N |
10.3.2009, 15:54
Сообщение
#9
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да просто перехожу с СИ, на СИ++, читаю попутно Страуструпа, и именно там этот подход называют "гнилым".
Цитата Лучше, однако, избегать изменяющих
свои параметры функций, чтобы не запутывать программу. В большинстве случаев предпочтительнее, чтобы функция возвращала результат явным образом, или чтобы использовался параметр типа указателя |
|
|
Litkevich Yuriy |
10.3.2009, 16:17
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
LE0N, на самом деле замечание было верным, но без понимания причин. предпочтительным является такой подход:
1) Если аргумент изменяется в вызываемой функции, то лучше использовать указатель, т.к. при передачи значения это будет видно: color.getHsv(&h, &s, &v); 2) если аргумент не изменяется, то лучше использовать ссылки, НО константные: void exampleSlot(const QList<int> &list); а в консольку не смотрим там небось предупреждение что таких сигналов и слотов нет.... скорее всего он даже незнает о такой возможности Qt (добавить в файл проекта строчку: CONFIG += console, тогда Qt будет о многих неровных местах сама сообщать)
|
|
|
Текстовая версия | Сейчас: 30.11.2024, 3:40 |