我试图以这种方式连接到一个信号:
QObject::connect(myObj, SIGNAL(mySignal(std::list<MyClass*> myList)), this, SLOT(mySlot(std::list<MyClass*> myList)));
Run Code Online (Sandbox Code Playgroud)
插槽未被调用.那是错的吗?我可以用std::list在signal/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)
如果信号发射对象和接收对象位于不同的线程中,则必须使用qRegisterMetaType注册元类型,然后才能在emit中使用它.在你的情况下:
qRegisterMetaType<std::list< MyClass* > >("std::list<MyClass*>");
Run Code Online (Sandbox Code Playgroud)
在应用程序开始的某个地方应该这样做.
| 归档时间: |
|
| 查看次数: |
5555 次 |
| 最近记录: |