调用show()时QMessagebox不显示文本

时间:2016-05-01 17:32:07

标签: qt

我的问题是我需要显示一条消息,要求用户在检查其他客户端的网络可用性时等待。我的方法是我有一个类workerThread来开展业务,在开始之前我创建了一个{{1 }}。但是消息只显示标题,而不是内容。我不明白为什么,请帮忙:(

这是工作线程:

qMessageBox

实现:

#include <QObject>
#include <QString>
#include "clientdataobj.h"
class WorkerThread : public QObject
{
    Q_OBJECT
public:
    explicit WorkerThread(QObject *parent = 0);


    QList<ClientDataObj> listClient() const;
    void setListClient(const QList<ClientDataObj> &listClient);


signals:
    void finished();
    void error(QString err);
    void listClientPingChecked( QList <ClientDataObj> list);
public slots:
    void testPing();

private:
    QList <ClientDataObj> mListClient;



    bool pingEachClient(QString ip);

};

我如何在MainWindow中调用它:

#include "workerthread.h"
#include <QFile>
#include <QMessageBox>
#include <QTextStream>
WorkerThread::WorkerThread(QObject *parent) :
    QObject(parent)
{
}

void WorkerThread::testPing()
{
    if (mListClient.size()==0) {
        emit finished();
        return;
    }
    else{

        for(unsigned i=0;i<mListClient.size();i++){

            bool result = pingEachClient(mListClient[i].ip());
            if(result)
                mListClient[i].setStatus(true);
            else
                mListClient[i].setStatus(false);

        }
        emit listClientPingChecked(mListClient);
    }
    emit finished();
}

bool WorkerThread::pingEachClient(QString ip)
{
    QString pingCommand = "ping " +ip +  " -c 3 | grep loss | awk ' {print $7}' > pingResult.txt";
    system(qPrintable(pingCommand));
    QString lossPercentTxt = readFileText("pingResult.txt") ;
    lossPercentTxt.chop(1);
    int lossPercent = lossPercentTxt.toInt();

    if(lossPercent<10){
        return true;
    }
    else return false;
}


QList<ClientDataObj> WorkerThread::listClient() const
{
    return mListClient;
}

void WorkerThread::setListClient(const QList<ClientDataObj> &listClient)
{
    mListClient = listClient;
}

1 个答案:

答案 0 :(得分:0)

您创建了一个新线程,但是您不能将任何对象移动到该线程。所以你的新线程什么都不做。我假设您不会mpWorkerThread被移动到新线程。在这种情况下,您错过了mpWorkerThread->moveToThread(mpThreadPing);