Qt выдаёт аргументы в слот
Я не могу передать аргумент слоту. Если я не передаю аргумент, функция прокручивается через штраф. Если я передаю аргумент (целое число), я получаю ошибки "Нет такого типа имени" и "Нет такого слота" при компиляции.
В моем заголовке я объявляю:
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
}
Ответы
Ответ 1
Себастьян прав, что вы не можете сделать это так, как вы пытаетесь, однако Qt предоставляет класс, который дает вам необходимую функциональность.
Просмотрите QSignalMapper. Он позволяет связать целое число с парой объект/сигнал. Затем вы подключаетесь к своим сигналам, а не непосредственно к кнопке.
Ответ 2
Сигнал и слот должны иметь одинаковый номер и тип аргумента (ов), и вы можете передавать только аргументы (сигналы) сигнала в слот, а не любую переменную или значение, которое вы хотите.
Ответ 3
Я вижу три проблемы с этим.
Во-первых, сигнал 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()
вам нужно указать сигнальные и слотовые сигнатуры с их параметром . Где у вас count
внутри функции connect()
, оно должно быть int
.
И, в-третьих, в вашем вызове отсутствует скобка: SIGNAL(clicked(count))
.
Надеюсь, что это поможет.