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. undefined reference to `Config::SingleLinkedList::staticMetaObject' and `vtable for Config::SingleLinkedList'
Forum Update on Monday, May 27th 2025

undefined reference to `Config::SingleLinkedList::staticMetaObject' and `vtable for Config::SingleLinkedList'

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 6 Posters 3.5k Views
  • 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.
  • L Offline
    L Offline
    Limer
    wrote on 29 Dec 2017, 09:22 last edited by
    #1

    class ConfigBase : public QWidget, it has slots and signals, so Q_OBJECT is set in the code.

    Now, class SingleLinkedList : public ConfigBase , it also has its own slots and signals, so Q_OBJECT is also set in the code. But i come across one problem.

    error: undefined reference to `Config::SingleLinkedList::staticMetaObject'

    error: undefined reference to `vtable for Config::SingleLinkedList'

    collect2.exe:-1: error: error: ld returned 1 exit status

    I googled many, but no use.

    If you want all the project(it is a little project, but is not convenient to public), leave your email !

    A J 2 Replies Last reply 29 Dec 2017, 10:30
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 29 Dec 2017, 09:24 last edited by
      #2

      Hi,

      Did you add/remove the Q_OBJECT macro at some point ? If so you should re-run qmake or do a full rebuild.

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

      L 1 Reply Last reply 29 Dec 2017, 09:29
      1
      • S SGaist
        29 Dec 2017, 09:24

        Hi,

        Did you add/remove the Q_OBJECT macro at some point ? If so you should re-run qmake or do a full rebuild.

        L Offline
        L Offline
        Limer
        wrote on 29 Dec 2017, 09:29 last edited by
        #3

        @SGaist

        I tried, no use.

        1 Reply Last reply
        0
        • L Limer
          29 Dec 2017, 09:22

          class ConfigBase : public QWidget, it has slots and signals, so Q_OBJECT is set in the code.

          Now, class SingleLinkedList : public ConfigBase , it also has its own slots and signals, so Q_OBJECT is also set in the code. But i come across one problem.

          error: undefined reference to `Config::SingleLinkedList::staticMetaObject'

          error: undefined reference to `vtable for Config::SingleLinkedList'

          collect2.exe:-1: error: error: ld returned 1 exit status

          I googled many, but no use.

          If you want all the project(it is a little project, but is not convenient to public), leave your email !

          A Offline
          A Offline
          aha_1980
          Lifetime Qt Champion
          wrote on 29 Dec 2017, 10:30 last edited by
          #4

          @Limer said in undefined reference to `Config::SingleLinkedList::staticMetaObject' and `vtable for Config::SingleLinkedList':

          class ConfigBase : public QWidget, it has slots and signals, so Q_OBJECT is set in the code.

          Hello, is your class defined in a header or in a cpp file?

          If it's in a header file, try deleting the whole build folder (make sure there are no Makefiles left, neither in the source nor in the build folder).

          If the definition is in a cpp file, then you will have to include the generated .moc file your own by apppending something like #include "singlelinkedlist.moc" at the end of your cpp file.

          Qt has to stay free or it will die.

          L 1 Reply Last reply 29 Dec 2017, 11:56
          2
          • A aha_1980
            29 Dec 2017, 10:30

            @Limer said in undefined reference to `Config::SingleLinkedList::staticMetaObject' and `vtable for Config::SingleLinkedList':

            class ConfigBase : public QWidget, it has slots and signals, so Q_OBJECT is set in the code.

            Hello, is your class defined in a header or in a cpp file?

            If it's in a header file, try deleting the whole build folder (make sure there are no Makefiles left, neither in the source nor in the build folder).

            If the definition is in a cpp file, then you will have to include the generated .moc file your own by apppending something like #include "singlelinkedlist.moc" at the end of your cpp file.

            L Offline
            L Offline
            Limer
            wrote on 29 Dec 2017, 11:56 last edited by
            #5

            @aha_1980

            In a heaer file. I tried, but it doesn`t work.

            1 Reply Last reply
            0
            • L Limer
              29 Dec 2017, 09:22

              class ConfigBase : public QWidget, it has slots and signals, so Q_OBJECT is set in the code.

              Now, class SingleLinkedList : public ConfigBase , it also has its own slots and signals, so Q_OBJECT is also set in the code. But i come across one problem.

              error: undefined reference to `Config::SingleLinkedList::staticMetaObject'

              error: undefined reference to `vtable for Config::SingleLinkedList'

              collect2.exe:-1: error: error: ld returned 1 exit status

              I googled many, but no use.

              If you want all the project(it is a little project, but is not convenient to public), leave your email !

              J Offline
              J Offline
              joeQ
              wrote on 29 Dec 2017, 12:04 last edited by
              #6

              @Limer Hi, friend.

              1. Dot forget to add Q_OBJECT in head of class.
              2. run qmake again.

              If not Ok, you could show some code in your post.

              Just do it!

              L 1 Reply Last reply 29 Dec 2017, 12:16
              0
              • J joeQ
                29 Dec 2017, 12:04

                @Limer Hi, friend.

                1. Dot forget to add Q_OBJECT in head of class.
                2. run qmake again.

                If not Ok, you could show some code in your post.

                L Offline
                L Offline
                Limer
                wrote on 29 Dec 2017, 12:16 last edited by
                #7

                @joeQ

                #ifndef CONFIG_BASE_H
                #define CONFIG_BASE_H
                
                #include <QPushButton>
                #include <QSlider>
                #include <QGridLayout>
                #include <QGroupBox>
                
                #define CONFIG_NAMESPACE_START namespace Config {
                #define CONFIG_NAMESPACE_END   }
                
                class ConfigBase : public QWidget
                {
                    Q_OBJECT
                
                public:
                    explicit ConfigBase(QWidget *parent = 0) : QWidget(parent)
                    {
                        groupBox1 = new QGroupBox(tr("Speed Control"));
                        speedSlider = new QSlider(Qt::Horizontal, groupBox1);
                        speedSlider->setMinimum(0);
                        speedSlider->setMaximum(300);
                        speedSlider->setValue(150);
                        sliderLayout = new QVBoxLayout(groupBox1);
                        sliderLayout->addWidget(speedSlider);
                
                        groupBox2 = new QGroupBox(tr("Start && Pause"));
                        startPushButton = new QPushButton(tr("Start"));
                        pausePushButton = new QPushButton(tr("Pause"));
                        resetPushButton = new QPushButton(tr("Reset"));
                        startPushButton->setEnabled(true);
                        pausePushButton->setEnabled(false);
                        resetPushButton->setEnabled(false);
                        pushButtonLayout = new QGridLayout(groupBox2);
                        pushButtonLayout->addWidget(startPushButton, 0, 0, 1, 1);
                        pushButtonLayout->addWidget(pausePushButton, 0, 1, 1, 1);
                        pushButtonLayout->addWidget(resetPushButton, 1, 0, 1, 1);
                
                        connect(startPushButton, SIGNAL(clicked(bool)), SLOT(start()));
                        connect(pausePushButton, SIGNAL(clicked(bool)), SLOT(pause()));
                        connect(resetPushButton, SIGNAL(clicked(bool)), SLOT(reset()));
                    }
                
                    ~ConfigBase()
                    {}
                
                public slots:
                    void start()
                    {
                        startPushButton->setEnabled(false);
                        pausePushButton->setEnabled(true);
                        emit comboBoxEnabled(false);
                    }
                
                    void pause()
                    {
                        if (pausePushButton->text() == QString(QObject::tr("Pause")))
                        {
                            pausePushButton->setText(QObject::tr("Continue"));
                            resetPushButton->setEnabled(true);
                            emit comboBoxEnabled(true);
                        }
                        else
                        {
                            pausePushButton->setText(QObject::tr("Pause"));
                            resetPushButton->setEnabled(false);
                            emit comboBoxEnabled(false);
                        }
                    }
                
                    void reset()
                    {
                        pausePushButton->setText(QObject::tr("Pause"));
                        startPushButton->setEnabled(true);
                        pausePushButton->setEnabled(false);
                        resetPushButton->setEnabled(false);
                        speedSlider->setValue(150);
                        emit comboBoxEnabled(true);
                    }
                
                signals:
                    void comboBoxEnabled(bool);
                
                public:
                    QPushButton *startPushButton;
                    QPushButton *pausePushButton;
                    QPushButton *resetPushButton;
                    QSlider     *speedSlider;
                
                protected:
                    QGroupBox   *groupBox1;
                    QGroupBox   *groupBox2;
                
                private:
                    QVBoxLayout *sliderLayout;
                    QGridLayout *pushButtonLayout;
                };
                
                #endif // CONFIG_BASE_H
                
                
                #ifndef CONFIG_SINGLE_LINKED_LIST
                #define CONFIG_SINGLE_LINKED_LIST
                
                #include <QCheckBox>
                #include <QSpinBox>
                #include <QTabWidget>
                #include <QTextEdit>
                #include "config_base.h"
                
                CONFIG_NAMESPACE_START
                
                class SingleLinkedList : public ConfigBase
                {
                    Q_OBJECT
                
                public:
                    explicit SingleLinkedList(ConfigBase *parent = 0) : ConfigBase(parent)
                    {
                        delete groupBox1;
                        startPushButton->setEnabled(false);
                
                        insertWidget      = new QWidget;
                        insertPosGroupBox = new QGroupBox(tr("Position"));
                        insertKeyGroupBox = new QGroupBox(tr("Key"));
                        headCheckBox1     = new QCheckBox(tr("head"));
                        tailCheckBox1     = new QCheckBox(tr("tail"));
                        keyTextEdit1      = new QTextEdit;
                        customSpinBox1    = new QSpinBox;
                        keyTextEdit1->setPlaceholderText(tr("key text edit"));
                        customSpinBox1->setRange(2, 10);
                        QHBoxLayout *hBoxLayout1 = new QHBoxLayout(insertPosGroupBox);
                        hBoxLayout1->addWidget(headCheckBox1);
                        hBoxLayout1->addWidget(tailCheckBox1);
                        hBoxLayout1->addWidget(customSpinBox1);
                        QHBoxLayout *hBoxLayout2 = new QHBoxLayout(insertKeyGroupBox);
                        hBoxLayout2->addWidget(keyTextEdit1);
                        QVBoxLayout *vBoxLayout1 = new QVBoxLayout(insertWidget);
                        vBoxLayout1->addWidget(insertPosGroupBox);
                        vBoxLayout1->addWidget(insertKeyGroupBox);
                        vBoxLayout1->setSpacing(20);
                
                        findWidget       = new QWidget;
                        findKeyGroupBox  = new QGroupBox(tr("Key"));
                        keyTextEdit2     = new QTextEdit;
                        keyTextEdit2->setPlaceholderText(tr("key text edit"));
                        QHBoxLayout *hBoxLayout3 = new QHBoxLayout(findKeyGroupBox);
                        hBoxLayout3->addWidget(keyTextEdit2);
                        QVBoxLayout *vBoxLayout2 = new QVBoxLayout(findWidget);
                        vBoxLayout2->addWidget(findKeyGroupBox);
                
                        removeWidget      = new QWidget;
                        removePosGroupBox = new QGroupBox(tr("By Position"));
                        removekeyGroupBox = new QGroupBox(tr("or By Key"));
                        headCheckBox3     = new QCheckBox(tr("head"));
                        tailCheckBox3     = new QCheckBox(tr("tail"));
                        customSpinBox3    = new QSpinBox;
                        keyTextEdit3      = new QTextEdit;
                        customSpinBox3->setRange(2, 10);
                        keyTextEdit3->setPlaceholderText(tr("text edit"));
                        QHBoxLayout *hBoxLayout4 = new QHBoxLayout(removePosGroupBox);
                        hBoxLayout4->addWidget(headCheckBox3);
                        hBoxLayout4->addWidget(tailCheckBox3);
                        hBoxLayout4->addWidget(customSpinBox3);
                        QHBoxLayout *hBoxLayout5 = new QHBoxLayout(removekeyGroupBox);
                        hBoxLayout5->addWidget(keyTextEdit3);
                        QVBoxLayout *vBoxLayout3 = new QVBoxLayout(removeWidget);
                        vBoxLayout3->addWidget(removePosGroupBox);
                        vBoxLayout3->addWidget(removekeyGroupBox);
                        vBoxLayout3->setSpacing(20);
                
                        tabWidget = new QTabWidget;
                        tabWidget->addTab(insertWidget, tr("Insert"));
                        tabWidget->addTab(findWidget, tr("Find"));
                        tabWidget->addTab(removeWidget, tr("Remove"));
                
                        mainVBoxLayout = new QVBoxLayout(this);
                        mainVBoxLayout->addWidget(tabWidget);
                        mainVBoxLayout->addWidget(groupBox2);
                        mainVBoxLayout->setSpacing(30);
                
                        connect(headCheckBox1, SIGNAL(stateChanged(int)), this, SLOT(slot1(int)));
                        connect(tailCheckBox1, SIGNAL(stateChanged(int)), SLOT(slot2(int)));
                        connect(headCheckBox3, SIGNAL(stateChanged(int)), SLOT(slot3(int)));
                        connect(tailCheckBox3, SIGNAL(stateChanged(int)), SLOT(slot4(int)));
                        connect(tabWidget, SIGNAL(currentChanged(int)), SLOT(tabChangedReset(int)));
                
                    }
                
                    ~SingleLinkedList()
                    {}
                
                public slots:
                    void slot1(int state)
                    {
                        if (state == Qt::Checked)
                        {
                            tailCheckBox1->setCheckState(Qt::Unchecked);
                            customSpinBox1->setValue(2);
                            tailCheckBox1->setEnabled(false);
                            customSpinBox1->setEnabled(false);
                        }
                        else
                        {
                            tailCheckBox1->setEnabled(true);
                            customSpinBox1->setEnabled(true);
                        }
                    }
                
                    void slot2(int state)
                    {
                        if (state == Qt::Checked)
                        {
                            headCheckBox1->setCheckState(Qt::Unchecked);
                            customSpinBox1->setValue(2);
                            headCheckBox1->setEnabled(false);
                            customSpinBox1->setEnabled(false);
                        }
                        else
                        {
                            headCheckBox1->setEnabled(true);
                            customSpinBox1->setEnabled(true);
                        }
                    }
                
                    void slot3(int state)
                    {
                        if (state == Qt::Checked)
                        {
                            tailCheckBox3->setCheckState(Qt::Unchecked);
                            customSpinBox3->setValue(2);
                            tailCheckBox3->setEnabled(false);
                            customSpinBox3->setEnabled(false);
                        }
                        else
                        {
                            tailCheckBox3->setEnabled(true);
                            customSpinBox3->setEnabled(true);
                        }
                    }
                
                    void slot4(int state)
                    {
                        if (state == Qt::Checked)
                        {
                            headCheckBox3->setCheckState(Qt::Unchecked);
                            customSpinBox3->setValue(2);
                            headCheckBox3->setEnabled(false);
                            customSpinBox3->setEnabled(false);
                        }
                        else
                        {
                            headCheckBox3->setEnabled(true);
                            customSpinBox3->setEnabled(true);
                        }
                    }
                
                    void insertWidgetReset()
                    {
                        headCheckBox1->setCheckState(Qt::Unchecked);
                        tailCheckBox1->setCheckState(Qt::Unchecked);
                        customSpinBox1->setValue(2);
                        headCheckBox1->setEnabled(true);
                        tailCheckBox1->setEnabled(true);
                        customSpinBox1->setEnabled(true);
                        keyTextEdit1->clear();
                    }
                
                    void findWidgetReset()
                    {
                        keyTextEdit2->clear();
                    }
                
                    void removeWidgetReset()
                    {
                        headCheckBox3->setCheckState(Qt::Unchecked);
                        tailCheckBox3->setCheckState(Qt::Unchecked);
                        customSpinBox3->setValue(2);
                        headCheckBox3->setEnabled(true);
                        tailCheckBox3->setEnabled(true);
                        customSpinBox3->setEnabled(true);
                        keyTextEdit3->clear();
                    }
                
                    void tabChangedReset(int index)
                    {
                        startPushButton->setEnabled(false);
                
                        switch (index)
                        {
                        case 0:
                            insertWidgetReset();
                            break;
                        case 1:
                            findWidgetReset();
                            break;
                        case 2:
                            removeWidgetReset();
                            break;
                        }
                    }
                
                    void resetAll()
                    {
                        //insertWidgetReset(); //  jian cha yi xia
                        findWidgetReset();
                        removeWidgetReset();
                        tabWidget->setCurrentIndex(0);
                
                        reset();
                        startPushButton->setEnabled(false);
                    }
                
                private:
                    QVBoxLayout *mainVBoxLayout;
                
                    QTabWidget  *tabWidget;
                    QWidget     *insertWidget;
                    QWidget     *findWidget;
                    QWidget     *removeWidget;
                
                    QGroupBox   *insertPosGroupBox;
                    QGroupBox   *insertKeyGroupBox;
                    QCheckBox   *headCheckBox1;
                    QCheckBox   *tailCheckBox1;
                    QSpinBox    *customSpinBox1;
                    QTextEdit   *keyTextEdit1;
                
                    QGroupBox   *findKeyGroupBox;
                    QTextEdit   *keyTextEdit2;
                
                    QGroupBox   *removePosGroupBox;
                    QGroupBox   *removekeyGroupBox;
                    QCheckBox   *headCheckBox3;
                    QCheckBox   *tailCheckBox3;
                    QSpinBox    *customSpinBox3;
                    QTextEdit   *keyTextEdit3;
                };
                
                CONFIG_NAMESPACE_END
                
                #endif // CONFIG_SINGLE_LINKED_LIST
                
                
                J 1 Reply Last reply 29 Dec 2017, 13:00
                0
                • L Limer
                  29 Dec 2017, 12:16

                  @joeQ

                  #ifndef CONFIG_BASE_H
                  #define CONFIG_BASE_H
                  
                  #include <QPushButton>
                  #include <QSlider>
                  #include <QGridLayout>
                  #include <QGroupBox>
                  
                  #define CONFIG_NAMESPACE_START namespace Config {
                  #define CONFIG_NAMESPACE_END   }
                  
                  class ConfigBase : public QWidget
                  {
                      Q_OBJECT
                  
                  public:
                      explicit ConfigBase(QWidget *parent = 0) : QWidget(parent)
                      {
                          groupBox1 = new QGroupBox(tr("Speed Control"));
                          speedSlider = new QSlider(Qt::Horizontal, groupBox1);
                          speedSlider->setMinimum(0);
                          speedSlider->setMaximum(300);
                          speedSlider->setValue(150);
                          sliderLayout = new QVBoxLayout(groupBox1);
                          sliderLayout->addWidget(speedSlider);
                  
                          groupBox2 = new QGroupBox(tr("Start && Pause"));
                          startPushButton = new QPushButton(tr("Start"));
                          pausePushButton = new QPushButton(tr("Pause"));
                          resetPushButton = new QPushButton(tr("Reset"));
                          startPushButton->setEnabled(true);
                          pausePushButton->setEnabled(false);
                          resetPushButton->setEnabled(false);
                          pushButtonLayout = new QGridLayout(groupBox2);
                          pushButtonLayout->addWidget(startPushButton, 0, 0, 1, 1);
                          pushButtonLayout->addWidget(pausePushButton, 0, 1, 1, 1);
                          pushButtonLayout->addWidget(resetPushButton, 1, 0, 1, 1);
                  
                          connect(startPushButton, SIGNAL(clicked(bool)), SLOT(start()));
                          connect(pausePushButton, SIGNAL(clicked(bool)), SLOT(pause()));
                          connect(resetPushButton, SIGNAL(clicked(bool)), SLOT(reset()));
                      }
                  
                      ~ConfigBase()
                      {}
                  
                  public slots:
                      void start()
                      {
                          startPushButton->setEnabled(false);
                          pausePushButton->setEnabled(true);
                          emit comboBoxEnabled(false);
                      }
                  
                      void pause()
                      {
                          if (pausePushButton->text() == QString(QObject::tr("Pause")))
                          {
                              pausePushButton->setText(QObject::tr("Continue"));
                              resetPushButton->setEnabled(true);
                              emit comboBoxEnabled(true);
                          }
                          else
                          {
                              pausePushButton->setText(QObject::tr("Pause"));
                              resetPushButton->setEnabled(false);
                              emit comboBoxEnabled(false);
                          }
                      }
                  
                      void reset()
                      {
                          pausePushButton->setText(QObject::tr("Pause"));
                          startPushButton->setEnabled(true);
                          pausePushButton->setEnabled(false);
                          resetPushButton->setEnabled(false);
                          speedSlider->setValue(150);
                          emit comboBoxEnabled(true);
                      }
                  
                  signals:
                      void comboBoxEnabled(bool);
                  
                  public:
                      QPushButton *startPushButton;
                      QPushButton *pausePushButton;
                      QPushButton *resetPushButton;
                      QSlider     *speedSlider;
                  
                  protected:
                      QGroupBox   *groupBox1;
                      QGroupBox   *groupBox2;
                  
                  private:
                      QVBoxLayout *sliderLayout;
                      QGridLayout *pushButtonLayout;
                  };
                  
                  #endif // CONFIG_BASE_H
                  
                  
                  #ifndef CONFIG_SINGLE_LINKED_LIST
                  #define CONFIG_SINGLE_LINKED_LIST
                  
                  #include <QCheckBox>
                  #include <QSpinBox>
                  #include <QTabWidget>
                  #include <QTextEdit>
                  #include "config_base.h"
                  
                  CONFIG_NAMESPACE_START
                  
                  class SingleLinkedList : public ConfigBase
                  {
                      Q_OBJECT
                  
                  public:
                      explicit SingleLinkedList(ConfigBase *parent = 0) : ConfigBase(parent)
                      {
                          delete groupBox1;
                          startPushButton->setEnabled(false);
                  
                          insertWidget      = new QWidget;
                          insertPosGroupBox = new QGroupBox(tr("Position"));
                          insertKeyGroupBox = new QGroupBox(tr("Key"));
                          headCheckBox1     = new QCheckBox(tr("head"));
                          tailCheckBox1     = new QCheckBox(tr("tail"));
                          keyTextEdit1      = new QTextEdit;
                          customSpinBox1    = new QSpinBox;
                          keyTextEdit1->setPlaceholderText(tr("key text edit"));
                          customSpinBox1->setRange(2, 10);
                          QHBoxLayout *hBoxLayout1 = new QHBoxLayout(insertPosGroupBox);
                          hBoxLayout1->addWidget(headCheckBox1);
                          hBoxLayout1->addWidget(tailCheckBox1);
                          hBoxLayout1->addWidget(customSpinBox1);
                          QHBoxLayout *hBoxLayout2 = new QHBoxLayout(insertKeyGroupBox);
                          hBoxLayout2->addWidget(keyTextEdit1);
                          QVBoxLayout *vBoxLayout1 = new QVBoxLayout(insertWidget);
                          vBoxLayout1->addWidget(insertPosGroupBox);
                          vBoxLayout1->addWidget(insertKeyGroupBox);
                          vBoxLayout1->setSpacing(20);
                  
                          findWidget       = new QWidget;
                          findKeyGroupBox  = new QGroupBox(tr("Key"));
                          keyTextEdit2     = new QTextEdit;
                          keyTextEdit2->setPlaceholderText(tr("key text edit"));
                          QHBoxLayout *hBoxLayout3 = new QHBoxLayout(findKeyGroupBox);
                          hBoxLayout3->addWidget(keyTextEdit2);
                          QVBoxLayout *vBoxLayout2 = new QVBoxLayout(findWidget);
                          vBoxLayout2->addWidget(findKeyGroupBox);
                  
                          removeWidget      = new QWidget;
                          removePosGroupBox = new QGroupBox(tr("By Position"));
                          removekeyGroupBox = new QGroupBox(tr("or By Key"));
                          headCheckBox3     = new QCheckBox(tr("head"));
                          tailCheckBox3     = new QCheckBox(tr("tail"));
                          customSpinBox3    = new QSpinBox;
                          keyTextEdit3      = new QTextEdit;
                          customSpinBox3->setRange(2, 10);
                          keyTextEdit3->setPlaceholderText(tr("text edit"));
                          QHBoxLayout *hBoxLayout4 = new QHBoxLayout(removePosGroupBox);
                          hBoxLayout4->addWidget(headCheckBox3);
                          hBoxLayout4->addWidget(tailCheckBox3);
                          hBoxLayout4->addWidget(customSpinBox3);
                          QHBoxLayout *hBoxLayout5 = new QHBoxLayout(removekeyGroupBox);
                          hBoxLayout5->addWidget(keyTextEdit3);
                          QVBoxLayout *vBoxLayout3 = new QVBoxLayout(removeWidget);
                          vBoxLayout3->addWidget(removePosGroupBox);
                          vBoxLayout3->addWidget(removekeyGroupBox);
                          vBoxLayout3->setSpacing(20);
                  
                          tabWidget = new QTabWidget;
                          tabWidget->addTab(insertWidget, tr("Insert"));
                          tabWidget->addTab(findWidget, tr("Find"));
                          tabWidget->addTab(removeWidget, tr("Remove"));
                  
                          mainVBoxLayout = new QVBoxLayout(this);
                          mainVBoxLayout->addWidget(tabWidget);
                          mainVBoxLayout->addWidget(groupBox2);
                          mainVBoxLayout->setSpacing(30);
                  
                          connect(headCheckBox1, SIGNAL(stateChanged(int)), this, SLOT(slot1(int)));
                          connect(tailCheckBox1, SIGNAL(stateChanged(int)), SLOT(slot2(int)));
                          connect(headCheckBox3, SIGNAL(stateChanged(int)), SLOT(slot3(int)));
                          connect(tailCheckBox3, SIGNAL(stateChanged(int)), SLOT(slot4(int)));
                          connect(tabWidget, SIGNAL(currentChanged(int)), SLOT(tabChangedReset(int)));
                  
                      }
                  
                      ~SingleLinkedList()
                      {}
                  
                  public slots:
                      void slot1(int state)
                      {
                          if (state == Qt::Checked)
                          {
                              tailCheckBox1->setCheckState(Qt::Unchecked);
                              customSpinBox1->setValue(2);
                              tailCheckBox1->setEnabled(false);
                              customSpinBox1->setEnabled(false);
                          }
                          else
                          {
                              tailCheckBox1->setEnabled(true);
                              customSpinBox1->setEnabled(true);
                          }
                      }
                  
                      void slot2(int state)
                      {
                          if (state == Qt::Checked)
                          {
                              headCheckBox1->setCheckState(Qt::Unchecked);
                              customSpinBox1->setValue(2);
                              headCheckBox1->setEnabled(false);
                              customSpinBox1->setEnabled(false);
                          }
                          else
                          {
                              headCheckBox1->setEnabled(true);
                              customSpinBox1->setEnabled(true);
                          }
                      }
                  
                      void slot3(int state)
                      {
                          if (state == Qt::Checked)
                          {
                              tailCheckBox3->setCheckState(Qt::Unchecked);
                              customSpinBox3->setValue(2);
                              tailCheckBox3->setEnabled(false);
                              customSpinBox3->setEnabled(false);
                          }
                          else
                          {
                              tailCheckBox3->setEnabled(true);
                              customSpinBox3->setEnabled(true);
                          }
                      }
                  
                      void slot4(int state)
                      {
                          if (state == Qt::Checked)
                          {
                              headCheckBox3->setCheckState(Qt::Unchecked);
                              customSpinBox3->setValue(2);
                              headCheckBox3->setEnabled(false);
                              customSpinBox3->setEnabled(false);
                          }
                          else
                          {
                              headCheckBox3->setEnabled(true);
                              customSpinBox3->setEnabled(true);
                          }
                      }
                  
                      void insertWidgetReset()
                      {
                          headCheckBox1->setCheckState(Qt::Unchecked);
                          tailCheckBox1->setCheckState(Qt::Unchecked);
                          customSpinBox1->setValue(2);
                          headCheckBox1->setEnabled(true);
                          tailCheckBox1->setEnabled(true);
                          customSpinBox1->setEnabled(true);
                          keyTextEdit1->clear();
                      }
                  
                      void findWidgetReset()
                      {
                          keyTextEdit2->clear();
                      }
                  
                      void removeWidgetReset()
                      {
                          headCheckBox3->setCheckState(Qt::Unchecked);
                          tailCheckBox3->setCheckState(Qt::Unchecked);
                          customSpinBox3->setValue(2);
                          headCheckBox3->setEnabled(true);
                          tailCheckBox3->setEnabled(true);
                          customSpinBox3->setEnabled(true);
                          keyTextEdit3->clear();
                      }
                  
                      void tabChangedReset(int index)
                      {
                          startPushButton->setEnabled(false);
                  
                          switch (index)
                          {
                          case 0:
                              insertWidgetReset();
                              break;
                          case 1:
                              findWidgetReset();
                              break;
                          case 2:
                              removeWidgetReset();
                              break;
                          }
                      }
                  
                      void resetAll()
                      {
                          //insertWidgetReset(); //  jian cha yi xia
                          findWidgetReset();
                          removeWidgetReset();
                          tabWidget->setCurrentIndex(0);
                  
                          reset();
                          startPushButton->setEnabled(false);
                      }
                  
                  private:
                      QVBoxLayout *mainVBoxLayout;
                  
                      QTabWidget  *tabWidget;
                      QWidget     *insertWidget;
                      QWidget     *findWidget;
                      QWidget     *removeWidget;
                  
                      QGroupBox   *insertPosGroupBox;
                      QGroupBox   *insertKeyGroupBox;
                      QCheckBox   *headCheckBox1;
                      QCheckBox   *tailCheckBox1;
                      QSpinBox    *customSpinBox1;
                      QTextEdit   *keyTextEdit1;
                  
                      QGroupBox   *findKeyGroupBox;
                      QTextEdit   *keyTextEdit2;
                  
                      QGroupBox   *removePosGroupBox;
                      QGroupBox   *removekeyGroupBox;
                      QCheckBox   *headCheckBox3;
                      QCheckBox   *tailCheckBox3;
                      QSpinBox    *customSpinBox3;
                      QTextEdit   *keyTextEdit3;
                  };
                  
                  CONFIG_NAMESPACE_END
                  
                  #endif // CONFIG_SINGLE_LINKED_LIST
                  
                  
                  J Offline
                  J Offline
                  joeQ
                  wrote on 29 Dec 2017, 13:00 last edited by
                  #8

                  @Limer

                  Try include QWidget in ConfigBase head file.
                  and Try include QObject in SingleLinkedList head file.

                  run qmake again.

                  Just do it!

                  L 1 Reply Last reply 30 Dec 2017, 08:48
                  1
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 29 Dec 2017, 13:33 last edited by mrjj
                    #9

                    Hi
                    The code is fine. Compiles here.
                    So if still complaining, then completely delete the build folder.

                    alt text

                    L 1 Reply Last reply 30 Dec 2017, 08:54
                    0
                    • J joeQ
                      29 Dec 2017, 13:00

                      @Limer

                      Try include QWidget in ConfigBase head file.
                      and Try include QObject in SingleLinkedList head file.

                      run qmake again.

                      L Offline
                      L Offline
                      Limer
                      wrote on 30 Dec 2017, 08:48 last edited by Limer
                      #10

                      @joeQ

                      I tried, failed. this is all project : https://pan.baidu.com/s/1c2hNztm

                      1 Reply Last reply
                      0
                      • mrjjM mrjj
                        29 Dec 2017, 13:33

                        Hi
                        The code is fine. Compiles here.
                        So if still complaining, then completely delete the build folder.

                        alt text

                        L Offline
                        L Offline
                        Limer
                        wrote on 30 Dec 2017, 08:54 last edited by Limer
                        #11

                        @mrjj

                        I had deleted all build* file, but failed again and same errors. this is all project : https://pan.baidu.com/s/1c2hNztm

                        1 Reply Last reply
                        0
                        • Paul ColbyP Offline
                          Paul ColbyP Offline
                          Paul Colby
                          wrote on 30 Dec 2017, 09:39 last edited by
                          #12

                          Hi @Limer,

                          The problem appears to be that you have two SingleLinkedList classes. Although they are in two separate namespaces, for whatever reason (not sure its a bug, or a known limitation), QMake is only producing a moc file for one of them - if you rename either source file, the moc will be for the other.

                          I'd suggest you rename one of those classes.

                          Cheers.

                          1 Reply Last reply
                          3
                          • mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on 30 Dec 2017, 09:43 last edited by mrjj
                            #13

                            Hi
                            You have the file single_linked_list.h in two folders
                            moc seems them as one
                            NMAKE:-1: warning: U4004: too many rules for target 'debug\moc_single_linked_list.cpp'

                            so rename one of the files and it works. you can do it directly in project explorer and all
                            is changed correctly.

                            alt text

                            alt text

                            ahh @Paul-Colby beat me to it :)

                            L 1 Reply Last reply 30 Dec 2017, 09:48
                            4
                            • mrjjM mrjj
                              30 Dec 2017, 09:43

                              Hi
                              You have the file single_linked_list.h in two folders
                              moc seems them as one
                              NMAKE:-1: warning: U4004: too many rules for target 'debug\moc_single_linked_list.cpp'

                              so rename one of the files and it works. you can do it directly in project explorer and all
                              is changed correctly.

                              alt text

                              alt text

                              ahh @Paul-Colby beat me to it :)

                              L Offline
                              L Offline
                              Limer
                              wrote on 30 Dec 2017, 09:48 last edited by
                              #14

                              @mrjj @Paul Colby

                              Thanks, it`s ok!

                              1 Reply Last reply
                              2

                              1/14

                              29 Dec 2017, 09:22

                              • Login

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