2011-04-09 106 views
2

在QtCreator 变化信号/插槽上下文菜单中,我不能插入既不信号也不具有参数化参数如插槽:的QList <的QString>等,或甚至只引用常规类型( int,QSring等)QtCreator和信号和槽

为什么?

回答

5

当连接信号到插座使用的QObject的元类型系统:

连接(发件人,SIGNAL(更新(的QList < MyClass的>),接收器,SLOT(list_updated(的QList < MyClass的>))

信号和槽的参数是“的QList < MyClass的>”的元类型。既然是定制元类型,Qt库没有底层实现类型的知识。

用 声明新类型Q_DECLARE_METATYPE()使它们可用于QVariant和其他 基于模板的函数。请致电 qRegisterMetaType()使类型 可用于基于非模板的 功能,例如排队信号 和插槽连接。

所以你需要添加元类型声明,你做连接之前:

qRegisterMetaType<MyClass>("MyClass"); 
qRegisterMetaType<QList<MyClass> >("QList<MyClass>"); 
+1

哎哟,不知道的Qt能拿这么丑'(' – rubenvb 2011-04-26 14:44:40

+0

恕我直言,这不是丑,而是精彩 !因为通过这种方式,你可以在QVariant中导出一个自定义类,并且你可以做任何你想做的事情! 比如序列化或者像CORBA那样的信号和插槽...... 想想这种可能性! – poe84it 2015-04-10 11:26:11