Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QTest GUI getting started

QTest GUI getting started

Scheduled Pinned Locked Moved Solved General and Desktop
11 Posts 5 Posters 3.8k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J jastmc

    I am trying to figure out how to use QTest to test my gui application, so I set up a simple program like the one in this posting Qt test empty window. (Using Qt 5.7 on Ubuntu)

    When I try to run it, I get the message tst_mytest.cpp:33: undefined reference to `MyMainWindow::MyMainWindow(QWidget)'*.

    This should be really simple but I can't figure out what it is.

    Thanks,
    Jas

    //tst_mytest.cpp
    
    #include <QString>
    #include <QtTest>
    #include <QCoreApplication>
    #include "../MyApp/mymainwindow.h"
    #include "../MyApp/ui_mymainwindow.h"
    
    #include <QDebug>
    #include <QPushButton>
    
    class MyTest : public QObject
    {
        Q_OBJECT
    
    public:
        MyTest();
    
    private Q_SLOTS:
        void initTestCase();
        void cleanupTestCase();
        void testCase1();
    
    private:
        MyMainWindow* MyMainWindow_ ;
    
    };
    
    MyTest::MyTest()
    {
    }
    
    void MyTest::initTestCase()
    {
        MyMainWindow_ = new MyMainWindow;
        MyMainWindow_->show();
    
    }
    
    void MyTest::cleanupTestCase()
    {
    }
    
    void MyTest::testCase1()
    {
        QVERIFY2(true, "Failure");
    }
    
    QTEST_MAIN(MyTest)
    
    #include "tst_mytest.moc"
    
    //MyTest.pro
    
    #-------------------------------------------------
    #
    # Project created by QtCreator 2017-11-06T10:12:26
    #
    #-------------------------------------------------
    
    QT       += widgets testlib core
    
    TARGET = tst_mytest
    CONFIG   += console
    CONFIG   -= app_bundle
    
    TEMPLATE = app
    
    
    SOURCES += tst_mytest.cpp
    DEFINES += SRCDIR=\\\"$$PWD/\\\"
    
    INCLUDEPATH += $$PWD/../MyApp
    
    //mymainwindow.cpp
    
    #include "mymainwindow.h"
    #include "ui_mymainwindow.h"
    
    MyMainWindow::MyMainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MyMainWindow)
    {
        ui->setupUi(this);
    }
    
    MyMainWindow::~MyMainWindow()
    {
        delete ui;
    }
    
    void MyMainWindow::on_pushButton_clicked()
    {
        if (ui->checkBox->isChecked())
            ui->checkBox->setChecked(false);
        else
            ui->checkBox->setChecked(true);
    }
    
    //mymainwindow.h
    
    #ifndef MYMAINWINDOW_H
    #define MYMAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MyMainWindow;
    }
    
    class MyMainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MyMainWindow(QWidget *parent = 0);
        ~MyMainWindow();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::MyMainWindow *ui;
    };
    
    #endif // MYMAINWINDOW_H
    
    //MyApp.pro
    
    #ifndef MYMAINWINDOW_H
    #define MYMAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MyMainWindow;
    }
    
    class MyMainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MyMainWindow(QWidget *parent = 0);
        ~MyMainWindow();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::MyMainWindow *ui;
    };
    
    #endif // MYMAINWINDOW_H
    
    //MySolution.pro
    
    TEMPLATE = subdirs  
    SUBDIRS += MyApp \
        MyTest
    
    
    J Offline
    J Offline
    jastmc
    wrote on last edited by
    #2

    @jastmc said in QTest GUI getting started:

    MyMainWindow_ = new MyMainWindow;

    I should have said the error occurs on the line on the line

    MyMainWindow_ = new MyMainWindow;
    
    JonBJ 1 Reply Last reply
    0
    • J jastmc

      @jastmc said in QTest GUI getting started:

      MyMainWindow_ = new MyMainWindow;

      I should have said the error occurs on the line on the line

      MyMainWindow_ = new MyMainWindow;
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #3

      [EDIT: please ignore this post, it's irrelevant and wrong. Sorry!]

      @jastmc
      Since the example you quote uses:

      mainWindow_ = new MainWindow();
      

      why do you write

      MyMainWindow_ = new MyMainWindow;
      

      and then ask why it doesn't behave same?

      JonBJ 1 Reply Last reply
      0
      • mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #4

        @jastmc said in QTest GUI getting started:

        MyMainWindow_ = new MyMainWindow;

        undefined reference to `MyMainWindow::MyMainWindow(QWidget)'*.

        It says it dont know your constructor.

        I would completely delete the build folder, and run qmake + rebuild all.

        If error persists, please check that MyMainWindow.cpp is actual included into the .pro file
        so it gets linked to the tst_mytest project.

        1 Reply Last reply
        1
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #5

          Hi,

          In your test, you only build the test sources itself. What about the class you want to test ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • JonBJ JonB

            [EDIT: please ignore this post, it's irrelevant and wrong. Sorry!]

            @jastmc
            Since the example you quote uses:

            mainWindow_ = new MainWindow();
            

            why do you write

            MyMainWindow_ = new MyMainWindow;
            

            and then ask why it doesn't behave same?

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #6

            @JNBarchan said in QTest GUI getting started:

            @jastmc
            Since the example you quote uses:

            mainWindow_ = new MainWindow();
            

            why do you write

            MyMainWindow_ = new MyMainWindow;
            

            and then ask why it doesn't behave same?

            Whoops? For my own edification, does stinky C++ allow you to omit the () in new Something and call a default constructor? parameterless constructor? complain if multiple constructors? or what??

            mrjjM 1 Reply Last reply
            0
            • J Offline
              J Offline
              jastmc
              wrote on last edited by jastmc
              #7

              @SGaist OK. How do I make sure the class to be tested is built first?

              Regards
              Jas

              jsulmJ 1 Reply Last reply
              0
              • J jastmc

                @SGaist OK. How do I make sure the class to be tested is built first?

                Regards
                Jas

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #8

                @jastmc Add it to SOURCES and HEADERS in your pro file.

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • JonBJ JonB

                  @JNBarchan said in QTest GUI getting started:

                  @jastmc
                  Since the example you quote uses:

                  mainWindow_ = new MainWindow();
                  

                  why do you write

                  MyMainWindow_ = new MyMainWindow;
                  

                  and then ask why it doesn't behave same?

                  Whoops? For my own edification, does stinky C++ allow you to omit the () in new Something and call a default constructor? parameterless constructor? complain if multiple constructors? or what??

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  @JNBarchan
                  yes the new operator/compiler can construct an object if it can find
                  a default constructor (ctor). The ctor is a special function and and that is why () can be omitted even one often consider it just a function call.

                  https://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new

                  1 Reply Last reply
                  2
                  • J Offline
                    J Offline
                    jastmc
                    wrote on last edited by
                    #10

                    @jsulm Thanks, that was part of it.

                    I then had to add

                    INCLUDEPATH += $$PWD/../MyApp/ \
                                    ../../build-MySolution-Desktop_Qt_5_7_0_GCC_64bit-Debug/MyApp/ \
                    

                    to the MyTest.pro file because the next message was that it could not find the ui_mymainwindow.h file. So that solved it.

                    Regards,
                    Jas

                    1 Reply Last reply
                    1
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      You are missing the FORMS variable in your .pro file.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved