это нормально, сейчас все нормально, это нормальноСигнал соединения с разъемами в Qt с VTK (C++)
ответ
Вы просто ответили на свой вопрос. Ваш слот ожидает тип аргумента, который не может быть преобразован из типа сигнала.
class Foo
...
void mySlot(QPoint p);
void mySlot2(int i);
void mySlot3();
void mySlot4(QVariant v);
void mySlot5(QVariant v, int i);
... //elsewhere
class Bar
...
void mySignal(int);
...
//And the connections:
Foo foo;
Bar bar;
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot(QPoint))); //won't work
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot2(int))); //works; matching argument types
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot3())); //works; drops the int argument
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot4(QVariant))); //works; implicit conversion
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot5(QVariant, int))); //nope; more expected arguments than the signal provides
Edit: Ваш код соответствует выше ожиданий. Слот, к которому вы подключились, принимает несколько аргументов, в то время как сигнал не содержит никаких параметров.
, даже если я определил слот без аргумента, он не работает – BobbyMontana
Можете ли вы предоставить дополнительную информацию? Есть ли новое отладочное сообщение? –
nope нет отладочного сообщения, он просто не работает – BobbyMontana
Как указал Джон Харпер, у вас есть аргументы несоответствия между вашим сигналом и слотом.
Ваш сигнал должен выглядеть следующим образом
void sigPointIsPicked(vtkObject *, unsigned long, void *, void *, vtkCommand *);
И вы должны излучать так:
emit sigPointIsPicked(vtkObj_ptr, ulong_value, void_ptr_one, void_ptr_two, vtkCmd_ptr);
на самом деле я переопределил свой слот без каких-либо аргументов, и все же он все еще не работает – BobbyMontana
Если вы хотите, чтобы иметь время компиляции проверку на ваш сигнал-слот-соединения вы может использовать новый синтаксис, который описывается здесь: New Signal-Slot-Syntax in Qt5.
старая версия, которая используется в вашем коде основана на сравнения строк (это то, что макросы СИГНАЛ и SLOT делают). Новый синтаксис основан на указателях функций. Если аргументы не подходят, вы получите ошибку времени компиляции, а общая производительность кода должна быть лучше.
Во-первых: какая версия Qt используется? Справочная информация по этому вопросу: если вы используете версию> 5.5, вы можете использовать указатели на объекты, созданные с помощью макросов SIGNAL() SLOT(). Второй намек: вы проверяете журнал отладки Qt, если есть такие ошибки, как: Cannont connect signal slot? – KimKulling
Я использую версию QT 5.4 (и версию VTK 6.30) Я только что заметил на консольном приложении следующее сообщение: QObject :: connect: Несовместимые аргументы отправителя/получателя – BobbyMontana
Просьба предоставить более подробную информацию. http://stackoverflow.com/help/mcve А именно, по крайней мере, ваше объявление класса Maincontroller и объявление сигнала. Плюс объявление класса, содержащее слот и объявление слота – Tezirg