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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Игнорирование SLOT'a  (Прочитано 6087 раз)
Mish_ka
Гость
« : Апрель 07, 2011, 17:21 »

Код
C++ (Qt)
favin = new QAction("name",this);
connect(favin, SIGNAL(triggered()), this, SLOT(openFav(silka)));
zakladkiMenu->addAction(favin);
 
void iTMan::openFav(QString silka)
{
this->uiIT.wvMain->setUrl(QUrl(silka));
}
 

при указании
Код
C++ (Qt)
SLOT(openFav(silka))
 

прога запускатся но функция не вызывается

а при вызове без аргумента
Код
C++ (Qt)
SLOT(openFav())
 

функция вызывается

в чём проблема?
Записан
mutineer
Гость
« Ответ #1 : Апрель 07, 2011, 17:23 »

Нельзя связывать сигнал со слотом, у которого больше параметров или не совпадают типы параметров
Записан
Mish_ka
Гость
« Ответ #2 : Апрель 07, 2011, 17:36 »

а как это сделать
пробывал

Код
C++ (Qt)
connect(favin, SIGNAL(triggered(silka)), this, SLOT(openFav(silka)));
 

тоже функция игнорируется
Записан
mutineer
Гость
« Ответ #3 : Апрель 07, 2011, 17:39 »

У слота triggered() нет параметров, поэтому связать ты его можешь только со слотом без параметров. Система не может вызвать слот, потому что нечего ему в параметр передать. Что ты ожидаешь увидеть значением silka?
Записан
Mish_ka
Гость
« Ответ #4 : Апрель 07, 2011, 17:45 »

верхний кусок кода сидит в цикле
из файла читается имя закладки, и ссылка куда она идёт
всё это компонуется в выпадающее меню.

ссылки разные я их хочу открывать через одну функцию, и не писать их 10 одинаковых

добавил, в функцию параметр silka = ссылка на которую нужно перебросить вебвьювер.
Записан
mutineer
Гость
« Ответ #5 : Апрель 07, 2011, 17:52 »

Идею понял, но не вижу где хранится адрес куда нужно перейти.

Могу дать такой совет:
Сделай наследника QAction, которому добавь поле адреса для перехода. Его сигнал triggered() соедини со слотом openFav(). В слоте вызови sender(), получишь ссылку на объект, пославший сигнал. Приведи его к твоему типу, вытащи из него адрес перехода и переходи
Записан
mutineer
Гость
« Ответ #6 : Апрель 07, 2011, 17:56 »

И советую внимательно прочитать про сигналы-слоты, ибо подозреваю что концепцию ты понял неправильно
Записан
Mish_ka
Гость
« Ответ #7 : Апрель 07, 2011, 17:59 »

адрес храниться в файле
при первом вызове и обработке цикла
получаем silka  - это QString'овая переменная которая и хранит адрес вида "main/index.html", я её как аргумент и передаю в функцию в которой её передаю вебвьюверу

Код
C++ (Qt)
this->uiIT.wvMain->setUrl(QUrl(silka));

было бы проще если бы можно было вызывать эту строчку из слота не используя функцию

Код
C++ (Qt)
connect(favin, SIGNAL(triggered()), this, SLOT(uiIT.wvMain->setUrl(QUrl(silka))));

скорее всего я это понимаю не правильно, читал, ещё раз читаю, но как видно ничего не понимаю
Записан
mutineer
Гость
« Ответ #8 : Апрель 07, 2011, 18:03 »

Цитировать
SLOT(uiIT.wvMain->setUrl(QUrl(silka)))

Видимо ты считаешь что тут происходит задание значения параметров. Но это не так. Тут ты просто указываешь какую функцию надо вызвать. А в скобках надо перечислять не значения параметров, с которыми функция будет вызвана, а типы параметров, которые она принимает.
Записан
Mish_ka
Гость
« Ответ #9 : Апрель 07, 2011, 18:08 »

а параметры тогда как передаются?
Записан
mutineer
Гость
« Ответ #10 : Апрель 07, 2011, 18:10 »

Параметры слот получает от вызвавшего его сигнала(если они у сигнала есть). Сигнал triggered() не передает никаких параметров, потому что значит только что действие активировано (параметров у этого события нет никаких)
Записан
Mish_ka
Гость
« Ответ #11 : Апрель 07, 2011, 18:13 »

а click() ?
Записан
mutineer
Гость
« Ответ #12 : Апрель 07, 2011, 18:14 »

Пустые скобочки намекают что у него тоже нет параметров. Я тебе выше рассказал как будет работать
Записан
Mish_ka
Гость
« Ответ #13 : Апрель 07, 2011, 18:16 »

ясно

а по верхнему я ничего не понял вобще =)
Записан
mutineer
Гость
« Ответ #14 : Апрель 07, 2011, 18:17 »

извиняюсь, введен твоим кодом в заблуждение. в документации сигнал выглядит как
Код:
void QAction::triggered ( bool checked = false )
и соответственно передает булевый параметр
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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