2016-05-10 3 views
-2

это нормально, сейчас все нормально, это нормальноСигнал соединения с разъемами в Qt с VTK (C++)

+0

Во-первых: какая версия Qt используется? Справочная информация по этому вопросу: если вы используете версию> 5.5, вы можете использовать указатели на объекты, созданные с помощью макросов SIGNAL() SLOT(). Второй намек: вы проверяете журнал отладки Qt, если есть такие ошибки, как: Cannont connect signal slot? – KimKulling

+0

Я использую версию QT 5.4 (и версию VTK 6.30) Я только что заметил на консольном приложении следующее сообщение: QObject :: connect: Несовместимые аргументы отправителя/получателя – BobbyMontana

+0

Просьба предоставить более подробную информацию. http://stackoverflow.com/help/mcve А именно, по крайней мере, ваше объявление класса Maincontroller и объявление сигнала. Плюс объявление класса, содержащее слот и объявление слота – Tezirg

ответ

2

Вы просто ответили на свой вопрос. Ваш слот ожидает тип аргумента, который не может быть преобразован из типа сигнала.

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: Ваш код соответствует выше ожиданий. Слот, к которому вы подключились, принимает несколько аргументов, в то время как сигнал не содержит никаких параметров.

+0

, даже если я определил слот без аргумента, он не работает – BobbyMontana

+0

Можете ли вы предоставить дополнительную информацию? Есть ли новое отладочное сообщение? –

+0

nope нет отладочного сообщения, он просто не работает – BobbyMontana

0

Как указал Джон Харпер, у вас есть аргументы несоответствия между вашим сигналом и слотом.

Ваш сигнал должен выглядеть следующим образом

void sigPointIsPicked(vtkObject *, unsigned long, void *, void *, vtkCommand *); 

И вы должны излучать так:

emit sigPointIsPicked(vtkObj_ptr, ulong_value, void_ptr_one, void_ptr_two, vtkCmd_ptr); 
+0

на самом деле я переопределил свой слот без каких-либо аргументов, и все же он все еще не работает – BobbyMontana

1

Если вы хотите, чтобы иметь время компиляции проверку на ваш сигнал-слот-соединения вы может использовать новый синтаксис, который описывается здесь: New Signal-Slot-Syntax in Qt5.

старая версия, которая используется в вашем коде основана на сравнения строк (это то, что макросы СИГНАЛ и SLOT делают). Новый синтаксис основан на указателях функций. Если аргументы не подходят, вы получите ошибку времени компиляции, а общая производительность кода должна быть лучше.

 Смежные вопросы

  • Нет связанных вопросов^_^