3,881
社区成员
发帖
与我相关
我的任务
分享
#ifndef TK_H
#define TK_H
#include<QString>
#include<QThread>
#include<QDebug>
class Student
{
public:
Student(){}
Student(const QString &name, const QString &id)
:m_name(name), m_id(id)
{}
Student(const Student& stu)
{
//故意这样赋值。就是让Qt不能正确复制构造。哈哈!!!
m_name = stu.name();
m_id = stu.m_id;
}
QString name()const { return m_name; }
void name(const QString& name) { m_name = name; }
private:
QString m_name;
QString m_id;
};
class Test : public QObject
{
Q_OBJECT
public:
Test()
{
qRegisterMetaType<Student>("Student");
connect(this, SIGNAL(sendStu(Student)),
this, SLOT(getStu(Student)));
}
private slots:
void getStu(const Student &stu)
{
qDebug()<<QThread::currentThreadId()<<" "<<stu.name();
}
public:
void printStu(const Student& stu)
{
emit sendStu(stu);
}
private:
signals:
void sendStu(const Student& stu);
};
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(Test * test) : m_test(test)
{}
protected:
void run()
{
qDebug()<<"non main thread "<<QThread::currentThreadId()<<'\n';
Student stu("bbbbbbbb", "111111111111");
//发射信号
m_test->printStu(stu);
}
private:
Test *m_test;
};
#endif // TK_H
#include <QCoreApplication>
#include"tk.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Test test;
MyThread mythread(&test);
mythread.start();
return a.exec();
}