Please nominate your Qt Champions for 2021!

Problem With QTest::qSleep()

  • Inside a loop that is filling a listWidget with potentially millions of items I want to check if a cancel button has been pressed:

    @void TextBox::on_fillButton_clicked() {
    QStringList lines;
    for (int i=0; i < 100000; i++) {
    if (i % 1000 == 0) {
    if (actionCancelled) {
    actionCancelled = false;
    std::ostringstream ostr;
    ostr << "line " << i;
    lines << ostr.str().c_str();



    My hope was that the call to QTest::qWait() would allow the click on the Cancel button to be detected and its slot method called:

    @void TextBox::on_cancelButton_clicked() {
    actionCancelled = true;

    But it won't run because QTest::qWait() is implemented using QTest::qSleep(), and it seems to be an undefined reference:

    @undefined reference to `QTest::qSleep(int)'@

    Looking in qtestcase.h I see that QTest::qSleep() is defined like this:

    @Q_TESTLIB_EXPORT void qSleep(int ms);@

    Poking around the web I see that QTest::qSleep() is implemented on Windows using its Sleep function, so maybe the association between QTest::qSleep() and the Windows Sleep function is failing to be made, somehow.

    So I guess the questions are:

    If it's pilot error, what am I doing wrong?

    If it's a problem with my installation, how do I fix it?

    If I'm approaching this the wrong way, what approach should I take?


  • "QCoreApplication::processEvents()": is what you are looking for.

    If you want to use functionality of the QtTest library you will have to add <code>QT += testlib</code> to your <code>.pro</code> file.

Log in to reply