首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

急信号有关问题

2012-10-29 
急!信号问题!我定义了一个类C/C++ codeclass A{// ...... private:QString m_strName}typedef QListA

急!信号问题!
我定义了一个类

C/C++ code
class A{    // ...... private:    QString m_strName;};typedef QList<A> LISTA;class B{    // ....private:    LISTA m_listA;}


然后又一个信号,其参数是类 B
C/C++ code
signals:    void mySignal( const B& b );


运行程序弹出错误:QObject::connect: Cannot queue arguments of type 'B'
(Make sure 'B' is registered using qRegisterMetaType().)

然后我在 main 函数中添加注册代码:
C/C++ code
qRegisterMetaType<A>( "CLASS_A" );qRegisterMetaType<LISTA>( "LIST_A" );qRegisterMetaType<B>( "CLASS_B" );


但是运行还是报同样的错,请问该怎么做?

[解决办法]
信号槽连接,前提是类要从QObject继承
class MyClass : public QObject(或QtGui类)
{
Q_OBJECT

//........
};
[解决办法]
A B继承自QObject 
记得带Q_OBJECT宏
[解决办法]
qRegisterMetaType<A>( "A" );
qRegisterMetaType<B>( "B" );
应该这样写, 不需要加CLASS_
[解决办法]
为啥会和QObject没关系呢? Signal slot机制 需要meta信息。如果没有QObject Q_OBJECT, MetaObject Compiler不会产生meta信息的.

[解决办法]
用qRegisterMetaType或让你的类继承自 QObject 这是Qt的标准做法,如果不行就是其他地方有问题了
[解决办法]
class Block
 {
 public:
Block();
Block(const Block &other);
~Block();

Block(const QRect &rect, const QColor &color);

QColor color() const;
QRect rect() const;

 private:
QRect m_rect;
QColor m_color;
 };

Q_DECLARE_METATYPE(Block);

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qRegisterMetaType<Block>();
...
}

热点排行