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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как передать параметр в слот?  (Прочитано 12443 раз)
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 Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Сентябрь 30, 2018, 19:14 »

Ты хочешь в слоте узнать кто его вызвал? Используй метод sender()
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 01, 2018, 02:53 »

Пока в слоте changeIcons() нет параметров, все работает ну просто идеально. Но как только пытаюсь добавить туда параметр, все работать просто перестает. Например
     
Код:
      QObject::connect(&FIELD[i][j], SIGNAL(clicked()),this,SLOT(changeIcons(FIELD[[i][j]])));
уже просто не работает.
А откуда "испускающий" (clicked) возьмет этот параметр? Сигнал может передать только то что имеет (в данном случае checked). Иначе, как уже ответили, в слоте можно получить только sender'а - и все.

И лучше использовать новый синтаксис (адреса ф-ций), а если по-старинке то заглядывайте в консоль - там пишут почему connect не удался
Записан
zhbr
Гость
« Ответ #4 : Октябрь 01, 2018, 09:42 »

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
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #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 Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #6 : Октябрь 01, 2018, 16:09 »

судя по SIGNAL и SLOT еще неизвестно использует ли ТС Qt 5.
Судя по вопросу, TC вообще новичок в Qt. А начинать с 4.8, когда уже есть 5.11 может только большой оригинал))
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Октябрь 02, 2018, 22:41 »

не видел такой информации, спасибо.

ну теперь же лямбду оч просто повесить с нужным значением в контексте
Записан
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #8 : Октябрь 26, 2018, 17:48 »

Прошу прощения за оффтоп.
Судя по вопросу, TC вообще новичок в Qt. А начинать с 4.8, когда уже есть 5.11 может только большой оригинал))
Не согласен. Если вы вынуждены использовать CentOS 6.9 и унаследованные от нее дистрыбутивы, то Qt5 вам нужно или собирать самому Qt5, или искать левые репозитрии.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #9 : Октябрь 26, 2018, 19:49 »

Не согласен. Если вы вынуждены использовать CentOS 6.9 и унаследованные от нее дистрыбутивы, то Qt5 вам нужно или собирать самому Qt5, или искать левые репозитрии.
Без иксов - да. А так - онлайн инсталлер и ставь, что хочешь.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
zhbr
Гость
« Ответ #10 : Октябрь 27, 2018, 11:22 »

Без иксов - да. А так - онлайн инсталлер и ставь, что хочешь.
онлайн инсталлер можно юзать и без иксов. у себя делал так:
Код:
./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 Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #11 : Октябрь 27, 2018, 19:13 »

онлайн инсталлер можно юзать и без иксов. у себя делал так:
Код:
./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 Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #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
Гость
« Ответ #13 : Декабрь 11, 2018, 15:18 »

а этот qt account вам действительно нужен?

в моём случае я это скипаю
Код:
Controller.prototype.CredentialsPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}
« Последнее редактирование: Декабрь 11, 2018, 15:20 от zhbr » Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #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   Вверх
  Печать  
 
Перейти в:  


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