Qt выдает аргументы в слот - PullRequest
14 голосов
/ 12 ноября 2010

Я не могу передать аргумент в слот.Если я не передам аргумент, функция будет работать нормально.Если я передаю аргумент (целое число), я получаю ошибки «Нет такого типа имени» и «Нет такого слота» при компиляции.

В моем заголовке я объявляю:

private slots:
void addButton(int);
signals:
void clicked(int)

в моем Main.cpp я делаю:

int count;
int count = 0;
QPushButton* button = new QPushButton("Button");
_layout->addWidget(button);
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count)));

....

void Main::addButton(int count) {

//do stuff with count

}

Ответы [ 3 ]

17 голосов
/ 12 ноября 2010

Себастьян прав, что вы не можете сделать это так, как пытаетесь, однако Qt предоставляет класс, который предоставляет вам нужные вам функции.

Проверьте QSignalMapper .Это позволяет связать целое число с парой объект / сигнал.Затем вы подключаетесь к его сигналам, а не напрямую к кнопке.

8 голосов
/ 12 ноября 2010

Сигнал и слот должны иметь одинаковые номер и тип (ы) аргумента (ов), и вы можете передавать только аргумент (ы) сигнала в слот, но не любую переменную или значение, которое вы хотите.

3 голосов
/ 24 ноября 2010

Я вижу три проблемы с этим.

Во-первых, сигнал clicked() испускается QPushButton (без параметров), но вы пытаетесь переопределить его в своем собственном классе (с помощьюint параметр).Если вы хотите сделать это:

SignalClass* objectWithSignals = new SignalClass;
SlotClass* objectWithSlots = new SlotClass;
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b()));

, тогда вы можете подключиться только к сигналам, уже определенным в SignalClass.Другими словами, сигнал a() должен принадлежать SignalClass, а не SlotClass.

(Фактически, clicked() определен в базовом классе QPushButton QAbstractButton.)

Во-вторых, внутри функции connect() необходимо указать сигнал и сигнатурные подписи с их параметром types .Если у вас есть count внутри функции connect(), это должно быть int.

И в-третьих, в вашем вызове отсутствует скобка для подключения: SIGNAL(clicked(count)).

Надеждаэто помогает.

...