1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
|
|||||||||||
1 | |||||||||||
Особенности записи аргументов connect в Qt508.06.2016, 23:38. Показов 2431. Ответов 12
Метки нет (Все метки)
Добрый вечер.
Поясните пожалуйста, что значит это:
Если можно, прокомментировать всю строку. Спасибо!
0
|
08.06.2016, 23:38 | |
Ответы с готовыми решениями:
12
Как боротся с вирусом a-connect(i-connect,z-connect) Perl + MySQL = ошибка DBI connect(dbname=mysql; host=localhost',''...) failed: Couldnt connect to Could not connect: Can't connect to MySQL server "Can't connect to MySQL server on 'localhost' (10061) QMYSQL: Unable to connect" |
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.06.2016, 00:04 | 2 |
Сообщение было отмечено NewBi как решение
Решение
Кастит указатель на функцию типа &QSpinBox::valueChanged, к указателю на функцию класса QSpinBox который принимает int и возвращает void. Вроде так.
1
|
0 / 0 / 0
Регистрация: 08.08.2015
Сообщений: 91
|
|
09.06.2016, 06:45 | 3 |
Не понимаю зачем отказались от старого способа записи, раньше было короче и удобнее...а сейчас у неперегруженных функций с параметрами приходится записывать этот длинный каст, который не вмещается в ширину экрана. Почему компилятор не может это сделать за меня?
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.06.2016, 10:55 | 4 |
Старый способ есть и сейчас, используйте его.
Откуда компилятор знает чего вы там хотите?
1
|
0 / 0 / 0
Регистрация: 08.08.2015
Сообщений: 91
|
|
09.06.2016, 18:08 | 5 |
Он работает только со слотами, если например взять лямбда выражение, то я уже должен писать новым способом.
Если всего одна сигнатура и нет перегрузок, то почему бы не возложить это компилятору и не сделать запись короче.
0
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
09.06.2016, 19:20 | 6 |
Можно пару вопросов:
1. Причем тут лямбда-функции? 2. Зачем этот каст?
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
||||||
09.06.2016, 20:55 | 7 | |||||
Вообще-то, если всего один сигнал (без перегрузок) то достаточно
При том, что в connect можно передать лямбду. Но тогда, как сигнал надо передавать функтор, а не const char* как раньше. З.Ы. результат SLOT(...), SIGNAL(...) - const char* В случае перегруженных сигналов и слотов при передачи функтора возникает коллизия. Кастом явно указывается, какой сигнал/слот использовать.
1
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
09.06.2016, 21:13 | 8 |
Я знаю, но разве то что в примере передается в коннекте это лямбда? Видимо у меня неверное представление о лямбда-функциях.
Здорово, только недавно думал над тем, что же делать в таких случаях. Удачно ответ нашелся сам собой
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.06.2016, 23:58 | 9 |
Это просто товарищ kavashige завел тему о лямбдах. Для их использования в коннекте нужно использовать новый синтаксис.
0
|
0 / 0 / 0
Регистрация: 08.08.2015
Сообщений: 91
|
|
10.06.2016, 08:14 | 10 |
Прошу прощения, но каждый раз, когда я вижу новый синтаксис меня коробит...видимо только меня
А если он всего один и с параметрами... то я уже должен писать static_cast<void (QSpinBox::*)(int)>(...) бегая по всей клавиатуре нажимая символы * < : в то время, как в старом способе после слова SIGNAL(anysignal(int)) достаточно было указать сигнатуру в скобках, почему нельзя было сделать так? connect(this, &MyClass::mySignal(int), otherClass, &OtherClass::hisSlot(int));
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
10.06.2016, 08:26 | 11 |
kavashige, кто вам такле сказал?... Да хоть там будет 10 аргументов. Если нет перегрузок, то ничего кастить не надо.
1
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||||||
10.06.2016, 19:20 | 12 | |||||
А зачем, если можно (как указали выше)
0
|
0 / 0 / 0
Регистрация: 08.08.2015
Сообщений: 91
|
||||||
10.06.2016, 22:07 | 13 | |||||
Да я ошибся, действительно работает без указания типа...видимо давно я пытался соединить сигнал с функцией или лямбдой получив по рукам от компилятора стал всегда делать с явным указанием типа.
Добавлено через 7 минут В качестве примера, добавлю, нашел в примерах Qt, если все же не обойтись без каста и вас коробят длинные строки, то так можно чуток сократить длину:
0
|
10.06.2016, 22:07 | |
10.06.2016, 22:07 | |
Помогаю со студенческими работами здесь
13
Странное расположение в памяти аргументов функции с неизвестным количество аргументов $model.open несколько возвращаемых аргументов аргументов в resolve Выдаёт Database Error: Unable to connect to the database:Could not connect to MySQL Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |