Параметры Qt SLOTS (Beginner) - PullRequest
       25

Параметры Qt SLOTS (Beginner)

1 голос
/ 03 декабря 2011

Я новичок в Qt и делаю (или, по крайней мере, пытаюсь сделать) базовый калькулятор.Если я правильно понимаю, при этом:

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4")));

"4" не доступен (точнее, только его тип) в writeNumberLbl.В принципе, я бы хотел, чтобы при нажатии кнопки метка устанавливала текст «4».Тем не менее, у меня есть числа от 0 до 9, поэтому я хотел сделать:

connect(my_button_0, SIGNAL(clicked()), this, SLOT(writeNumberLbl("0")));
connect(my_button_1, SIGNAL(clicked()), this, SLOT(writeNumberLbl("1")));
...
connect(my_button_9, SIGNAL(clicked()), this, SLOT(writeNumberLbl("9")));

Моя функция writeNumberLbl:

void Calculator::preWriteVal(QChar val)
{
    QString curVal = ui.lbl_output->text();
    curVal += val;
    ui.lbl_output->setText(curVal);
}

Однако я вижу, что это не будет работать из-зак параметру 'val'.Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?Спасибо.Я посмотрел, ответил ли на этот вопрос уже, и не смог ничего найти.Если есть, предоставьте мне ссылку.

Также возможно ли с помощью Qt Designer 4 подключить виджет к пользовательскому слоту?

Спасибо.

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Насколько я знаю, система сигналов / слотов Qt требует, чтобы количество параметров функции сигнала не было меньше, чем , чем у функции слотов. В вашем примере сигнальная функция click () имеет нулевые параметры, а функция слота writeNumberLbl ("4") имеет один параметр, это не будет принято системой сигналов / слотов Qt, и если вы запустите свою программу в режиме отладки создателя Qt , qDebug покажет вам сообщение типа «Несовместимый сигнал / слот» blalbalba ~. Чтобы решить эту проблему, просто прочитайте статью Арнольда Спенса. Это вполне понятно.

0 голосов
/ 03 декабря 2011

Количество параметров в слоте не может выйти из тех, что в сигнале? и нажатие () не имеет ни одного. У вас есть два варианта (три, считая тупого):

  1. Используйте QSignalMapper. Его помощь не требует пояснений.
  2. Подключите все ваши кнопки к одному слоту. В нем выясните, какая кнопка была нажата. Помогает функция QObject :: sender ().

Есть еще больше способов, но более сложных.

0 голосов
/ 03 декабря 2011

Есть несколько способов решения этой проблемы, и они изложены очень красиво здесь . Хотя эта страница немного устарела, я думаю, что она по-прежнему вполне справедлива. Я бы порекомендовал использовать маппер сигналов.

На ваш второй вопрос, да. Вы можете подключить сигналы и слоты, используя Qt Designer, установив конструктор в режиме «Редактировать сигналы / слоты». Например, в этом режиме вы можете перетащить линию соединения с кнопки на форму. Откроется диалоговое окно, позволяющее выбрать сигнал и слот для подключения. Если вы еще не внедрили слот в код, вы можете указать имя слота, а затем добавить код для него.

...