Qt线程信号插槽问题

时间:2012-11-13 08:39:44

标签: qt qthread

我的threadcheck.h

        #include <QThread>
        #include <QDebug>
        #include <QMutex>
        class ThreadCheck : public QThread
        {
            Q_OBJECT
        public:
            explicit ThreadCheck(QObject *parent = 0);
            int Val() const;

        signals:
            void signalReceived();

        protected:
            void run();
        public slots:
            void slotReceived();
        private:
            QMutex mutex;
            int num;

        };

我的threadcheck.cpp文件是

         #include "threadcheck.h"
        ThreadCheck::ThreadCheck(QObject *parent) :
            QThread(parent)
        {
            connect(this,SIGNAL(signalReceived()),this,SLOT(slotReceived()));
            num = 0;
        }

        int ThreadCheck::Val() const
        {
            return num;
        }


        void ThreadCheck::slotReceived()
        {
            mutex.lock();
            qDebug() << "hello";
            mutex.unlock();
        }


        void ThreadCheck::run()
        {
            while(1)
            {
                emit signalReceived();
            }

        }   

main .cpp是

        #include <QCoreApplication>
        #include "threadcheck.h"
        int main(int argc, char *argv[])
        {
            QCoreApplication a(argc, argv);
            ThreadCheck threadCheck;
            threadCheck.start();
            while(1);
            return a.exec();
        }   

当我从main启动此线程时,它不会显示任何输出槽从不执行。 理想情况下,它应该继续打印你好。

请提出解决方案。

2 个答案:

答案 0 :(得分:3)

删除主要功能中的while(1)。

答案 1 :(得分:1)

没有太大的噪音,对QThreads进行子类化并覆盖run()方法不再是在Qt中使用线程的方法了。

请阅读this blog。它为我节省了数小时的头痛。目前尚不清楚这种变化何时发生,但该帖子中的示例代码现在位于Qt 5.x的官方文档中