Compilation error when trying to use a Custom Widget
-
wrote on 23 Apr 2023, 22:14 last edited by
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*)'
-
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*)'
wrote on 23 Apr 2023, 23:47 last edited by mpergand@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 ?
-
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*)'
wrote on 24 Apr 2023, 07:11 last edited by@PontiacGTX Have you added CustomSlider.cpp to the
add_executable(...)
in yourCMakeLists.txt
file? -
@PontiacGTX Have you added CustomSlider.cpp to the
add_executable(...)
in yourCMakeLists.txt
file?
1/4