![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Diem |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 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 |
![]()
Сообщение
#2
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
указатель либо ссылка
|
|
|
Diem |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ну как бы это очевидно.
Но я с c++ дело ооочень давно не имел, Все варианты перепробовал. Либо несовместимость типов либо ещё хрень какая. Пожалуйста если можно на этом примере * и & раставить ? ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
LE0N |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А почему не * ?
На сколько я знаю, подход с & плохо пахнет ? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Diem |
![]()
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Блин совсем запарился.
Всё верно, перепробывав все варианты забыл что и connect должен быть такого вида: connect(this, SIGNAL(exampleSignal(QList<int>&)), this, SLOT(exampleSlot(QList<int>&))); Спасибо. |
|
|
kwisp |
![]()
Сообщение
#8
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
А почему не * ? ну сделай указатель точно так же. Блин совсем запарился. Всё верно, перепробывав все варианты забыл что и connect должен быть такого вида: а в консольку не смотрим там небось предупреждение что таких сигналов и слотов нет.... Сообщение отредактировал kwisp - 10.3.2009, 15:51 |
|
|
LE0N |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да просто перехожу с СИ, на СИ++, читаю попутно Страуструпа, и именно там этот подход называют "гнилым".
Цитата Лучше, однако, избегать изменяющих
свои параметры функций, чтобы не запутывать программу. В большинстве случаев предпочтительнее, чтобы функция возвращала результат явным образом, или чтобы использовался параметр типа указателя |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
LE0N, на самом деле замечание было верным, но без понимания причин. предпочтительным является такой подход:
1) Если аргумент изменяется в вызываемой функции, то лучше использовать указатель, т.к. при передачи значения это будет видно: color.getHsv(&h, &s, &v); 2) если аргумент не изменяется, то лучше использовать ссылки, НО константные: void exampleSlot(const QList<int> &list); а в консольку не смотрим там небось предупреждение что таких сигналов и слотов нет.... скорее всего он даже незнает о такой возможности Qt (добавить в файл проекта строчку: CONFIG += console, тогда Qt будет о многих неровных местах сама сообщать)
|
|
|
kwisp |
![]()
Сообщение
#11
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
скорее всего он даже незнает о такой возможности Qt (добавить в файл проекта строчку: CONFIG += console, ////////////////////// Вывод ////////////////////// Запуск... value before slot: (1) value in slot: (1, 2) value after slot: (1) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ![]() Сообщение отредактировал kwisp - 10.3.2009, 16:20 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
kwisp, нда... ты прав
![]() |
|
|
Diem |
![]()
Сообщение
#13
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Такой подход у меня вызван тем, что есть конкретная задача:
Имеется tcp сервер (QTcpServer) В нем периодически создаются экзэмпляры класса (буду именновать Y) на каждый сигнал readyRead() срабатывает слот, который обрабатывает http хидеры и в зависимости от них вызывает нужную функцию. Одна из функций посылает сигнал c параметрами из http заголовка (params) + передаёт локальную переменную (list) по ссылке, на этот сигнал реагируют слоты всех эземпляров класса Y. И в зависимости от params либо всё игнорируют либо добавляют в list нужные данные. Потомlist переводится в json и идёт в ответ браузеру. const Type& var конечно в таком случае не прокатит. Так же при создании каждого экземпляра класса Y запускается QTimer при timeot() которого этот экземпляр и удаляется из памяти. Так вот у меня вопрос: возможно ли создать что-то типа QMap<int, *MyClass> что бы опрашивать в цикле, не все, а только те экземпляры Y которые мне нужно ? |
|
|
kwisp |
![]()
Сообщение
#14
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Diem |
![]()
Сообщение
#16
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
QMap<int, *MyClass> - выдаёт ошибку
Цитата ошибка: `*' не может присутствовать в константном выражении А QMap<int, MyClass*> - работает, спасибо. Да за оффтоп sorry. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я думаю вопрос поставленный в заголовке темы раскрыт полностью. И тему можно закрыть?
|
|
|
Diem |
![]()
Сообщение
#18
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.3.2009 Пользователь №: 603 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да, конечно.
|
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 12.6.2025, 19:26 |