Russian Qt Forum
Март 29, 2024, 11:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Как передать параметр в слот?
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как передать параметр в слот? (Прочитано 11009 раз)
SibVenn
Гость
Как передать параметр в слот?
«
:
Сентябрь 30, 2018, 18:18 »
Добрый день. Возникла проблема, которую я никак не могу решить.
Так вот...
Есть вот такая-вот штучка
Код:
QObject::connect(&FIELD[i][j], SIGNAL(clicked()),this,SLOT(changeIcons()));
которая вызывает вот это вот:
Код:
void gameField::changeIcons()
{
qDebug() << "it's works" << endl;
}
Пока в слоте changeIcons() нет параметров, все работает ну просто идеально. Но как только пытаюсь добавить туда параметр, все работать просто перестает. Например
Код:
QObject::connect(&FIELD[i][j], SIGNAL(clicked()),this,SLOT(changeIcons(FIELD[[i][j]])));
уже просто не работает.
p.s. Понимаю, что спрашиваю, наверное, крайне банальные вещи, но сам я ничего не нашел. А что нашел, не смог повторить...
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Как передать параметр в слот?
«
Ответ #1 :
Сентябрь 30, 2018, 19:14 »
Ты хочешь в слоте узнать кто его вызвал? Используй метод sender()
Записан
kambala
Джедай : наставник для всех
Online
Сообщений: 4724
Re: Как передать параметр в слот?
«
Ответ #2 :
Октябрь 01, 2018, 01:09 »
QSignalMapper. да и на форуме этот вопрос задавался уже миллион раз.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Как передать параметр в слот?
«
Ответ #3 :
Октябрь 01, 2018, 02:53 »
Цитата: SibVenn от Сентябрь 30, 2018, 18:18
Пока в слоте changeIcons() нет параметров, все работает ну просто идеально. Но как только пытаюсь добавить туда параметр, все работать просто перестает. Например
Код:
QObject::connect(&FIELD[i][j], SIGNAL(clicked()),this,SLOT(changeIcons(FIELD[[i][j]])));
уже просто не работает.
А откуда "испускающий" (clicked) возьмет этот параметр? Сигнал может передать только то что имеет (в данном случае checked). Иначе, как уже ответили, в слоте можно получить только sender'а - и все.
И лучше использовать новый синтаксис (адреса ф-ций), а если по-старинке то заглядывайте в консоль - там пишут почему connect не удался
Записан
zhbr
Гость
Re: Как передать параметр в слот?
«
Ответ #4 :
Октябрь 01, 2018, 09:42 »
Цитата: kambala от Октябрь 01, 2018, 01:09
QSignalMapper. да и на форуме этот вопрос задавался уже миллион раз.
не рекомендуется для нового кода использовать QSignalMapper: This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
Записан
kambala
Джедай : наставник для всех
Online
Сообщений: 4724
Re: Как передать параметр в слот?
«
Ответ #5 :
Октябрь 01, 2018, 14:58 »
не видел такой информации, спасибо.
судя по SIGNAL и SLOT еще неизвестно использует ли ТС Qt 5.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Как передать параметр в слот?
«
Ответ #6 :
Октябрь 01, 2018, 16:09 »
Цитата: kambala от Октябрь 01, 2018, 14:58
судя по SIGNAL и SLOT еще неизвестно использует ли ТС Qt 5.
Судя по вопросу, TC вообще новичок в Qt. А начинать с 4.8, когда уже есть 5.11 может только большой оригинал))
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Как передать параметр в слот?
«
Ответ #7 :
Октябрь 02, 2018, 22:41 »
Цитата: kambala от Октябрь 01, 2018, 14:58
не видел такой информации, спасибо.
ну теперь же лямбду оч просто повесить с нужным значением в контексте
Записан
ЙадоФитый ПлюсЧ
Новичок
Offline
Сообщений: 40
Re: Как передать параметр в слот?
«
Ответ #8 :
Октябрь 26, 2018, 17:48 »
Прошу прощения за оффтоп.
Цитата: sergek от Октябрь 01, 2018, 16:09
Судя по вопросу, TC вообще новичок в Qt. А начинать с 4.8, когда уже есть 5.11 может только большой оригинал))
Не согласен. Если вы вынуждены использовать CentOS 6.9 и унаследованные от нее дистрыбутивы, то Qt5 вам нужно или собирать самому Qt5, или искать левые репозитрии.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Как передать параметр в слот?
«
Ответ #9 :
Октябрь 26, 2018, 19:49 »
Цитата: ЙадоФитый ПлюсЧ от Октябрь 26, 2018, 17:48
Не согласен. Если вы вынуждены использовать CentOS 6.9 и унаследованные от нее дистрыбутивы, то Qt5 вам нужно или собирать самому Qt5, или искать левые репозитрии.
Без иксов - да. А так - онлайн инсталлер и ставь, что хочешь.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
zhbr
Гость
Re: Как передать параметр в слот?
«
Ответ #10 :
Октябрь 27, 2018, 11:22 »
Цитата: sergek от Октябрь 26, 2018, 19:49
Без иксов - да. А так - онлайн инсталлер и ставь, что хочешь.
онлайн инсталлер можно юзать и без иксов. у себя делал так:
Код:
./qt-unified-linux-x64-3.0.5-online.run --verbose --platform minimal --script qtni5101.qs
в qtni5101.qs:
Код:
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(function() {
gui.clickButton(buttons.NextButton);
})
}
Controller.prototype.WelcomePageCallback = function() {
gui.clickButton(buttons.NextButton, 3000);
}
Controller.prototype.CredentialsPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.IntroductionPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.TargetDirectoryPageCallback = function()
{
gui.currentPageWidget().TargetDirectoryLineEdit.setText("/opt/qt");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.deselectAll();
widget.selectComponent("qt.qt5.5101.gcc_64");
widget.selectComponent("qt.qt5.5101.qtquickcontrols");
widget.selectComponent("qt.qt5.5101.qtquickcontrols2");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.LicenseAgreementPageCallback = function() {
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.StartMenuDirectoryPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ReadyForInstallationPageCallback = function()
{
gui.clickButton(buttons.NextButton);
}
Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
gui.clickButton(buttons.FinishButton);
}
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Как передать параметр в слот?
«
Ответ #11 :
Октябрь 27, 2018, 19:13 »
Цитата: zhbr от Октябрь 27, 2018, 11:22
онлайн инсталлер можно юзать и без иксов. у себя делал так:
Код:
./qt-unified-linux-x64-3.0.5-online.run --verbose --platform minimal --script qtni5101.qs
Ух ты. Надо попробовать...
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Как передать параметр в слот?
«
Ответ #12 :
Декабрь 10, 2018, 16:40 »
Попробовал.. Обломался на старте:
Цитировать
sergek@Toshiba:~$ ./qt-unified-linux-x64-online.run --verbose --platform minimal --script qtni5.qs
IFW Version: 3.0.5, built with Qt 5.9.5.
Build date: Jun 12 2018
Installer Framework SHA1: 59aa5f1
Language: ru-RU
Arguments: ./qt-unified-linux-x64-online.run, --verbose, --script, qtni5.qs
[2] Operations sanity check succeeded.
[3] License read from resource file: "enterprise"
[3] Reading Qt Account settings from disk: "/home/sergek/.local/share/Qt/qtaccount.ini"
[3] QtAccount information:
[3] Login completed: false
[3] Email: "sergek@..."
[4] Total number of licenses: 0
[4] Account type: 3
[4] Resource tree:
[4] :/translations
..
Как заполнять этот qtaccount.ini, нигде не нашел. Кто-нибудь в курсе?
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
zhbr
Гость
Re: Как передать параметр в слот?
«
Ответ #13 :
Декабрь 11, 2018, 15:18 »
а этот qt account вам действительно нужен?
в моём случае я это скипаю
Код:
Controller.prototype.CredentialsPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
«
Последнее редактирование: Декабрь 11, 2018, 15:20 от zhbr
»
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Как передать параметр в слот?
«
Ответ #14 :
Декабрь 11, 2018, 16:38 »
Так я ваш скрипт и взял в качестве примера))
Возможно, я чего не догоняю - инсталлятор выводит пару строк
Цитировать
[166] Loaded control script "qtni5.qs"
[166] Using control script: "qtni5.qs"
и все застревает. В /tmp/ создается каталог и lock-файл и больше ничего не происходит.
Да, в общем, и фиг с ним. Потом разберусь.
«
Последнее редактирование: Декабрь 11, 2018, 22:03 от sergek
»
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...