当前位置:C++技术网 > 资讯 > Qt小教训之——移植第三方库修改成槽和信号的注意!

Qt小教训之——移植第三方库修改成槽和信号的注意!

更新时间:2016-10-21 15:31:42浏览次数:1+次

//这是一个错误的槽和信号的应用代码,发现错误没?
class Test 
{
    Q_OBJECT
public:
    Test() {}
    ~Test() {}
    void toggleSignal()
    {
        emit test();
    }
public slots:
    void testSlot(){qDebug()<<"Test....";}
signals:
    void test();
};

//调用代码  Test *t = new Test(); 
 connect(t,SIGNAL(test()),t,SLOT(testSlot()));
 t->toggleSignal();

之后,很荣幸的错了,错误为:

D:\Qt_Projects\untitled2\mainwindow.cpp:14: error: no matching function for call to 'MainWindow::connect(Test*&, const char*, Test*&, const char*)'
     connect(t,SIGNAL(test()),t,SLOT(slotTest()));
 你会想问:“what fuck !!!!!”为什么错了!!                                        ^

错误的原因很简单,因为我们使用了Qt的槽和信号,那么就要知道这个槽和信号是在哪里实现的!它是在Qt的基础类中实现的,也就是说我们需要让我们的代码成为Qt框架的派生类,所以修改后的代码为:


class Test : public QObject//!!!!!!就是这个,槽和信号从它来的,所以要派生于它
{
    Q_OBJECT
public:
    Test() {}
    ~Test() {}
    void toggleSignal()
    {
        emit test();
    }
public slots:
    void testSlot(){qDebug()<<"Test....";}
signals:
    void test();
};  
//调用代码  Test *t = new Test(); 

 connect(t,SIGNAL(test()),t,SLOT(testSlot()));
 t->toggleSignal();

然后出现了结果~~

以上就是本人经过五小时莫名其妙的移植代码错误中总结出来的教训。