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. Compilation error when trying to use a Custom Widget
Forum Updated to NodeBB v4.3 + New Features

Compilation error when trying to use a Custom Widget

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 4 Posters 496 Views 1 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.
  • P Offline
    P Offline
    PontiacGTX
    wrote on 23 Apr 2023, 22:14 last edited by
    #1

    Adding up a Custom defined Widget within QT Creator throws a compilation error when I am trying a new widget, so I am coming back to C++ after a while and I had forgotten part of the qt framework but I have tried to start with something simple as defining my own QSlider

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QWidget* tempWidgetCustomSlider = new QWidget();
        CustomSlider* cSlider =new CustomSlider(tempWidgetCustomSlider);
        QObject* objGrid =ui->centralwidget->layout()->findChild<QObject*>("gridLayout1");
        if(objGrid!=nullptr){
            QWidget* qwidgetCast = qobject_cast<QWidget *>(objGrid);
            //QGridLayout* grid = new QGridLayout(qwidgetCast);
            //grid->addWidget(cSlider,0,0);
            qwidgetCast->layout()->addWidget(cSlider);
        }
      
    
    }
    

    declaration for custom widget

    
    #ifndef CUSTOMSLIDER_H
    #define CUSTOMSLIDER_H
    
    #include <QSlider>
    
    
    
    class CustomSlider : public QSlider
    {
    public:
        CustomSlider(QWidget * parent=nullptr);
    };
    
    #endif // CUSTOMSLIDER_H
    

    definition for custom widget

    
    #include "CustomSlider.h"
    #include <QWidget>
    CustomSlider::CustomSlider(QWidget* parent):QSlider(parent)
    {
        if(parent){
            parent->setContentsMargins(0,0,0,0);
            parent->setFixedSize(20,20);
            parent->setStyleSheet("QSlider {"
                                  "background-color: #f0f0f0;"
                                  "border: none;"
                                  "border-radius: " + QString::number(10) + "px;"
                                                          "}"
                                                          "QSlider:hover {"
                                                          "background-color: #e0e0e0;"
                                                          "}"
                                                          "QSlider::handle:horizontal {"
                                                          "background-color: #ffffff;"
                                                          "border: 1px solid #999999;"
                                                          "height: 20px;"
                                                          "width: 20px;"
                                                          "margin: -5px -10px;"
                                                          "border-radius: 10px;"
                                                          "}");
        }
    }
    
    

    but I am getting the following error

    :-1: error: CMakeFiles/QTWidgetTest.dir/mainwindow.cpp.obj: in function `MainWindow::MainWindow(QWidget*)':

    \source\repos qt\QTWidgetTest\mainwindow.cpp:14: error: undefined reference to `CustomSlider::CustomSlider(QWidget*)'

    M C 2 Replies Last reply 23 Apr 2023, 23:47
    0
    • P PontiacGTX
      23 Apr 2023, 22:14

      Adding up a Custom defined Widget within QT Creator throws a compilation error when I am trying a new widget, so I am coming back to C++ after a while and I had forgotten part of the qt framework but I have tried to start with something simple as defining my own QSlider

      MainWindow::MainWindow(QWidget *parent)
          : QMainWindow(parent)
          , ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          QWidget* tempWidgetCustomSlider = new QWidget();
          CustomSlider* cSlider =new CustomSlider(tempWidgetCustomSlider);
          QObject* objGrid =ui->centralwidget->layout()->findChild<QObject*>("gridLayout1");
          if(objGrid!=nullptr){
              QWidget* qwidgetCast = qobject_cast<QWidget *>(objGrid);
              //QGridLayout* grid = new QGridLayout(qwidgetCast);
              //grid->addWidget(cSlider,0,0);
              qwidgetCast->layout()->addWidget(cSlider);
          }
        
      
      }
      

      declaration for custom widget

      
      #ifndef CUSTOMSLIDER_H
      #define CUSTOMSLIDER_H
      
      #include <QSlider>
      
      
      
      class CustomSlider : public QSlider
      {
      public:
          CustomSlider(QWidget * parent=nullptr);
      };
      
      #endif // CUSTOMSLIDER_H
      

      definition for custom widget

      
      #include "CustomSlider.h"
      #include <QWidget>
      CustomSlider::CustomSlider(QWidget* parent):QSlider(parent)
      {
          if(parent){
              parent->setContentsMargins(0,0,0,0);
              parent->setFixedSize(20,20);
              parent->setStyleSheet("QSlider {"
                                    "background-color: #f0f0f0;"
                                    "border: none;"
                                    "border-radius: " + QString::number(10) + "px;"
                                                            "}"
                                                            "QSlider:hover {"
                                                            "background-color: #e0e0e0;"
                                                            "}"
                                                            "QSlider::handle:horizontal {"
                                                            "background-color: #ffffff;"
                                                            "border: 1px solid #999999;"
                                                            "height: 20px;"
                                                            "width: 20px;"
                                                            "margin: -5px -10px;"
                                                            "border-radius: 10px;"
                                                            "}");
          }
      }
      
      

      but I am getting the following error

      :-1: error: CMakeFiles/QTWidgetTest.dir/mainwindow.cpp.obj: in function `MainWindow::MainWindow(QWidget*)':

      \source\repos qt\QTWidgetTest\mainwindow.cpp:14: error: undefined reference to `CustomSlider::CustomSlider(QWidget*)'

      M Offline
      M Offline
      mpergand
      wrote on 23 Apr 2023, 23:47 last edited by mpergand
      #2

      @PontiacGTX
      Hi,

      Seems you forget to include CustomSlider.h

      Your code is over complicated, if you want to add the slider to gridLayout1, there is more simple:

      CustomSlider* cSlider =new CustomSlider(nullptr);
      ui->gridLayout1->addWidget(cSlider);   // or addWidget(cSlider,0,0)
      

      QWidget* tempWidgetCustomSlider = new QWidget();

      What this line is supposed to do ?

      1 Reply Last reply
      0
      • P PontiacGTX
        23 Apr 2023, 22:14

        Adding up a Custom defined Widget within QT Creator throws a compilation error when I am trying a new widget, so I am coming back to C++ after a while and I had forgotten part of the qt framework but I have tried to start with something simple as defining my own QSlider

        MainWindow::MainWindow(QWidget *parent)
            : QMainWindow(parent)
            , ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
            QWidget* tempWidgetCustomSlider = new QWidget();
            CustomSlider* cSlider =new CustomSlider(tempWidgetCustomSlider);
            QObject* objGrid =ui->centralwidget->layout()->findChild<QObject*>("gridLayout1");
            if(objGrid!=nullptr){
                QWidget* qwidgetCast = qobject_cast<QWidget *>(objGrid);
                //QGridLayout* grid = new QGridLayout(qwidgetCast);
                //grid->addWidget(cSlider,0,0);
                qwidgetCast->layout()->addWidget(cSlider);
            }
          
        
        }
        

        declaration for custom widget

        
        #ifndef CUSTOMSLIDER_H
        #define CUSTOMSLIDER_H
        
        #include <QSlider>
        
        
        
        class CustomSlider : public QSlider
        {
        public:
            CustomSlider(QWidget * parent=nullptr);
        };
        
        #endif // CUSTOMSLIDER_H
        

        definition for custom widget

        
        #include "CustomSlider.h"
        #include <QWidget>
        CustomSlider::CustomSlider(QWidget* parent):QSlider(parent)
        {
            if(parent){
                parent->setContentsMargins(0,0,0,0);
                parent->setFixedSize(20,20);
                parent->setStyleSheet("QSlider {"
                                      "background-color: #f0f0f0;"
                                      "border: none;"
                                      "border-radius: " + QString::number(10) + "px;"
                                                              "}"
                                                              "QSlider:hover {"
                                                              "background-color: #e0e0e0;"
                                                              "}"
                                                              "QSlider::handle:horizontal {"
                                                              "background-color: #ffffff;"
                                                              "border: 1px solid #999999;"
                                                              "height: 20px;"
                                                              "width: 20px;"
                                                              "margin: -5px -10px;"
                                                              "border-radius: 10px;"
                                                              "}");
            }
        }
        
        

        but I am getting the following error

        :-1: error: CMakeFiles/QTWidgetTest.dir/mainwindow.cpp.obj: in function `MainWindow::MainWindow(QWidget*)':

        \source\repos qt\QTWidgetTest\mainwindow.cpp:14: error: undefined reference to `CustomSlider::CustomSlider(QWidget*)'

        C Offline
        C Offline
        ChrisW67
        wrote on 24 Apr 2023, 07:11 last edited by
        #3

        @PontiacGTX Have you added CustomSlider.cpp to the add_executable(...) in your CMakeLists.txt file?

        JoeCFDJ 1 Reply Last reply 25 Apr 2023, 13:58
        0
        • C ChrisW67
          24 Apr 2023, 07:11

          @PontiacGTX Have you added CustomSlider.cpp to the add_executable(...) in your CMakeLists.txt file?

          JoeCFDJ Offline
          JoeCFDJ Offline
          JoeCFD
          wrote on 25 Apr 2023, 13:58 last edited by JoeCFD
          #4

          @ChrisW67
          Q_OBJECT is missing as well

          class CustomSlider : public QSlider
          {    
             Q_OBJECT
          
          public:
              explicit CustomSlider(QWidget * parent=nullptr);
          };
          
          1 Reply Last reply
          1

          1/4

          23 Apr 2023, 22:14

          • Login

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