Qt插槽未调用

Bla*_*elt 1 qt signals-slots

我试图以这种方式连接到一个信号:

QObject::connect(myObj, SIGNAL(mySignal(std::list<MyClass*> myList)), this, SLOT(mySlot(std::list<MyClass*> myList)));
Run Code Online (Sandbox Code Playgroud)

插槽未被调用.那是错的吗?我可以用std::listsignal/slot对?

编辑:没有参数的同一对工作

class TestThread : public QThread
{
    Q_OBJECT

public:
    .....
    protected:
     virtual void run();

private:
    std::list<MyClass*> myList;

signals:
    void mySignal(std::list<MyClass*>&);



};
Q_DECLARE_METATYPE (std::list<MyClass*>)
Run Code Online (Sandbox Code Playgroud)

编辑:

void mySlot(const std::list<MyClass*> &);

void 
MyManager::mySlot(const std::list<MyClass*> &theList)
{
    std::cout << "mySlot " << std::endl;
}

void mySignal(const std::list<MyClass*> &theList);

TestThread ::TestThread (std::list<MyClass*>&theList, QObject *parent)
    :  QThread(parent),  myList(theList)
{


}



void
TestThread ::run() 
{
   ...
   emit mySignal(myList);
}
Run Code Online (Sandbox Code Playgroud)

到底:

QObject::connect(threadObj, SIGNAL(mySignal(std::list<MyClass*>)), this, SLOT(mySlot(std::list<MyClass*>)));
Run Code Online (Sandbox Code Playgroud)

jsl*_*lap 5

如果信号发射对象和接收对象位于不同的线程中,则必须使用qRegisterMetaType注册元类型,然后才能在emit中使用它.在你的情况下:

qRegisterMetaType<std::list< MyClass* > >("std::list<MyClass*>");
Run Code Online (Sandbox Code Playgroud)

在应用程序开始的某个地方应该这样做.