我正在尝试创建一个新的线程gpsthread,它应该在后台运行,并存储该值.
class gpsthread: public QThread{ Q_OBJECT private:nrega_status_t status2; public: explicit gpsthread(QObject *parent = 0):QThread(parent) { // QTimer *t = new QTimer(this); // connect(t, SIGNAL(timeout()), this, SLOT(processgps())); // t->start(10000); } void run(){ qDebug()<<"inside gps thread\n"; QTimer *t = new QTimer(this); connect(t, SIGNAL(timeout()), this, SLOT(processgps())); t->start(10000); } public slots:void processgps(){ int status2; status2=gps_management(); } };
我的主要课程是quickview.
int main(int argc, char *argv[]) { QString file = "qml/main.qml"; QApplication app(argc, argv); TranslationTest myObj; QuickView view; subthread object; gpsthread obj; gprsthread gprs; view.rootContext()->setContextProperty("rootItem", (QObject *)&myObj); obj.start(); //from subthread QObject::connect(&object, SIGNAL(batterytoqml(QVariant,QVariant)),item, SLOT(frombattery(QVariant,QVariant))); QObject::connect(&gprs, SIGNAL(gprstoqml(QVariant)),item, SLOT(fromgprs(QVariant))); return app.exec();
}
我也尝试过这个
class gpsthread: public QThread{ Q_OBJECT private:nrega_status_t status2; public:QTimer* t; explicit gpsthread(QObject *parent = 0):QThread(parent) { // QTimer *t = new QTimer(this); // connect(t, SIGNAL(timeout()), this, SLOT(processgps())); // t->start(10000); } void run(){ qDebug()<<"inside gps thread\n"; t = new QTimer(this); connect(t, SIGNAL(timeout()), this, SLOT(processgps())); t->start(10000); exec(); } public slots:void processgps(){ int status2; status2=gps_management(); } };
但这是错误的说法
QObject: Cannot create children for a parent that is in a different thread
如果我在构造函数中创建对象,那么它也会给出相同的错误,因为该对象将在主线程中创建.怎么解决这个?