creating cpp library using qt
-
i need to create a library that is able to draw things without x11 to the screen. Following items should be possible
o Buttons
o Text Boxes
o Images
o Input fields
o Virtual Keyboard
i am a beginner. I have seen some basic tutorials in creating a library. But couldnt figure out how to start my task properly. Can anyone guide me in this
-
Hi,
Aren't you describing Qt for Embedded Linux ?
-
Hi,
Aren't you describing Qt for Embedded Linux ?
@SGaist yes.. i have cross compiled qt in raspberry pi without x11..
now i need to create a library in cpp to implement in raspberry pii am little confused while creating library for creating buttons and all..
how to create a library to create buttons using qwidgets..
i created a library with qwidgets included in it and i coded in it to create a button, image viewer etc using qpushbutton, qlabel..
but when i tried to use the library in my application it is showing like qpushbutton cannot be found..qlabel not found..i dont know if my method is correct also..should i not include qwidgets in my library to acheive this..are there any supporting libraries which i can use to place the button,images etc in my custom library
-
@SGaist yes.. i have cross compiled qt in raspberry pi without x11..
now i need to create a library in cpp to implement in raspberry pii am little confused while creating library for creating buttons and all..
how to create a library to create buttons using qwidgets..
i created a library with qwidgets included in it and i coded in it to create a button, image viewer etc using qpushbutton, qlabel..
but when i tried to use the library in my application it is showing like qpushbutton cannot be found..qlabel not found..i dont know if my method is correct also..should i not include qwidgets in my library to acheive this..are there any supporting libraries which i can use to place the button,images etc in my custom library
@amruz said in creating cpp library using qt:
but when i tried to use the library in my application it is showing like qpushbutton cannot be found..qlabel not found..
That indicates that you're forgot to link your app against needed Qt libraries. Or even header files cannot be found? Can you show your pro file? And the exact errors? Else we can just guess what is the problem
-
@amruz said in creating cpp library using qt:
but when i tried to use the library in my application it is showing like qpushbutton cannot be found..qlabel not found..
That indicates that you're forgot to link your app against needed Qt libraries. Or even header files cannot be found? Can you show your pro file? And the exact errors? Else we can just guess what is the problem
-
@amruz said in creating cpp library using qt:
but when i tried to use the library in my application it is showing like qpushbutton cannot be found..qlabel not found..
That indicates that you're forgot to link your app against needed Qt libraries. Or even header files cannot be found? Can you show your pro file? And the exact errors? Else we can just guess what is the problem
#------------------------------------------------- # # Project created by QtCreator 2017-07-27T15:45:22 # #------------------------------------------------- QT += widgets QT -= core gui TARGET = worksharedlib TEMPLATE = lib DEFINES += WORKSHAREDLIB_LIBRARY SOURCES += worksharedlib.cpp HEADERS += worksharedlib.h\ worksharedlib_global.h unix { target.path = /usr/lib INSTALLS += target }
sharedlib.h
#ifndef WORKSHAREDLIB_H #define WORKSHAREDLIB_H #include "worksharedlib_global.h" #include<qobject.h> #include<qwidget.h> #include <QPushButton> #include<QLineEdit> #include <QHBoxLayout> #include<qlabel.h> #include<QtGui> class WORKSHAREDLIBSHARED_EXPORT Worksharedlib:public QWidget { Q_OBJECT public: //Worksharedlib(); Worksharedlib(QWidget *parent = 0); ~Worksharedlib() {} private slots: void handleButton(); void m_buttonClicked(); private: QPushButton *m_button; QLineEdit *m_textbox; QHBoxLayout *layout; QWidget *window; QLabel * label; QWidget *frame; }; #endif // WORKSHAREDLIB_H
sharedlib_global.h
#ifndef WORKSHAREDLIB_GLOBAL_H #define WORKSHAREDLIB_GLOBAL_H #include <QtCore/qglobal.h> #if defined(WORKSHAREDLIB_LIBRARY) # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_EXPORT #else # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_IMPORT #endif #endif // WORKSHAREDLIB_GLOBAL_H
sharedlib.cpp
#include "worksharedlib.h" #include <QCoreApplication> #include <QMessageBox> #include <QDebug> using namespace std; Worksharedlib::Worksharedlib(QWidget *parent) : QWidget (parent) { layout = new QHBoxLayout( this ); m_textbox = new QLineEdit ( this ); // Create the button, make "this" the parent m_button = new QPushButton("My Button",this); // set size and location of the button m_button->setGeometry(QRect(QPoint(300, 200), QSize(200, 50))); //create the text box layout->addWidget(m_textbox); m_textbox->setGeometry(100,200,90,25); //try image //create a image viewer QString url = R"(/home/pi/krishna.jpg)"; QPixmap img(url); QLabel *label = new QLabel(this); label->setGeometry(200,300,100,50); label->resize(this->width(),300); label->setPixmap(img); // Connect button signal to appropriate slot connect(m_button, SIGNAL (clicked()), this, SLOT (m_buttonClicked())); } void Worksharedlib::m_buttonClicked() { m_textbox = new QLineEdit; m_textbox->setPlaceholderText("Placeholder Text"); m_textbox->setFocus(); QMessageBox::information( this, "Information", "Just clicked Ui PushButton" ); }
in which all qt applications can i call this library.. what is the correct method to call this library in an application..
-
#------------------------------------------------- # # Project created by QtCreator 2017-07-27T15:45:22 # #------------------------------------------------- QT += widgets QT -= core gui TARGET = worksharedlib TEMPLATE = lib DEFINES += WORKSHAREDLIB_LIBRARY SOURCES += worksharedlib.cpp HEADERS += worksharedlib.h\ worksharedlib_global.h unix { target.path = /usr/lib INSTALLS += target }
sharedlib.h
#ifndef WORKSHAREDLIB_H #define WORKSHAREDLIB_H #include "worksharedlib_global.h" #include<qobject.h> #include<qwidget.h> #include <QPushButton> #include<QLineEdit> #include <QHBoxLayout> #include<qlabel.h> #include<QtGui> class WORKSHAREDLIBSHARED_EXPORT Worksharedlib:public QWidget { Q_OBJECT public: //Worksharedlib(); Worksharedlib(QWidget *parent = 0); ~Worksharedlib() {} private slots: void handleButton(); void m_buttonClicked(); private: QPushButton *m_button; QLineEdit *m_textbox; QHBoxLayout *layout; QWidget *window; QLabel * label; QWidget *frame; }; #endif // WORKSHAREDLIB_H
sharedlib_global.h
#ifndef WORKSHAREDLIB_GLOBAL_H #define WORKSHAREDLIB_GLOBAL_H #include <QtCore/qglobal.h> #if defined(WORKSHAREDLIB_LIBRARY) # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_EXPORT #else # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_IMPORT #endif #endif // WORKSHAREDLIB_GLOBAL_H
sharedlib.cpp
#include "worksharedlib.h" #include <QCoreApplication> #include <QMessageBox> #include <QDebug> using namespace std; Worksharedlib::Worksharedlib(QWidget *parent) : QWidget (parent) { layout = new QHBoxLayout( this ); m_textbox = new QLineEdit ( this ); // Create the button, make "this" the parent m_button = new QPushButton("My Button",this); // set size and location of the button m_button->setGeometry(QRect(QPoint(300, 200), QSize(200, 50))); //create the text box layout->addWidget(m_textbox); m_textbox->setGeometry(100,200,90,25); //try image //create a image viewer QString url = R"(/home/pi/krishna.jpg)"; QPixmap img(url); QLabel *label = new QLabel(this); label->setGeometry(200,300,100,50); label->resize(this->width(),300); label->setPixmap(img); // Connect button signal to appropriate slot connect(m_button, SIGNAL (clicked()), this, SLOT (m_buttonClicked())); } void Worksharedlib::m_buttonClicked() { m_textbox = new QLineEdit; m_textbox->setPlaceholderText("Placeholder Text"); m_textbox->setFocus(); QMessageBox::information( this, "Information", "Just clicked Ui PushButton" ); }
in which all qt applications can i call this library.. what is the correct method to call this library in an application..
-
#------------------------------------------------- # # Project created by QtCreator 2017-07-27T15:45:22 # #------------------------------------------------- QT += widgets QT -= core gui TARGET = worksharedlib TEMPLATE = lib DEFINES += WORKSHAREDLIB_LIBRARY SOURCES += worksharedlib.cpp HEADERS += worksharedlib.h\ worksharedlib_global.h unix { target.path = /usr/lib INSTALLS += target }
sharedlib.h
#ifndef WORKSHAREDLIB_H #define WORKSHAREDLIB_H #include "worksharedlib_global.h" #include<qobject.h> #include<qwidget.h> #include <QPushButton> #include<QLineEdit> #include <QHBoxLayout> #include<qlabel.h> #include<QtGui> class WORKSHAREDLIBSHARED_EXPORT Worksharedlib:public QWidget { Q_OBJECT public: //Worksharedlib(); Worksharedlib(QWidget *parent = 0); ~Worksharedlib() {} private slots: void handleButton(); void m_buttonClicked(); private: QPushButton *m_button; QLineEdit *m_textbox; QHBoxLayout *layout; QWidget *window; QLabel * label; QWidget *frame; }; #endif // WORKSHAREDLIB_H
sharedlib_global.h
#ifndef WORKSHAREDLIB_GLOBAL_H #define WORKSHAREDLIB_GLOBAL_H #include <QtCore/qglobal.h> #if defined(WORKSHAREDLIB_LIBRARY) # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_EXPORT #else # define WORKSHAREDLIBSHARED_EXPORT Q_DECL_IMPORT #endif #endif // WORKSHAREDLIB_GLOBAL_H
sharedlib.cpp
#include "worksharedlib.h" #include <QCoreApplication> #include <QMessageBox> #include <QDebug> using namespace std; Worksharedlib::Worksharedlib(QWidget *parent) : QWidget (parent) { layout = new QHBoxLayout( this ); m_textbox = new QLineEdit ( this ); // Create the button, make "this" the parent m_button = new QPushButton("My Button",this); // set size and location of the button m_button->setGeometry(QRect(QPoint(300, 200), QSize(200, 50))); //create the text box layout->addWidget(m_textbox); m_textbox->setGeometry(100,200,90,25); //try image //create a image viewer QString url = R"(/home/pi/krishna.jpg)"; QPixmap img(url); QLabel *label = new QLabel(this); label->setGeometry(200,300,100,50); label->resize(this->width(),300); label->setPixmap(img); // Connect button signal to appropriate slot connect(m_button, SIGNAL (clicked()), this, SLOT (m_buttonClicked())); } void Worksharedlib::m_buttonClicked() { m_textbox = new QLineEdit; m_textbox->setPlaceholderText("Placeholder Text"); m_textbox->setFocus(); QMessageBox::information( this, "Information", "Just clicked Ui PushButton" ); }
in which all qt applications can i call this library.. what is the correct method to call this library in an application..
@amruz said in creating cpp library using qt:
in which all qt applications can i call this library.. what is the correct method to call this library in an application..
You just link against your library and Qt in your app.
See here http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html -
@jsulm the pro file of my application which calls the library is
QT += core QT -= gui CONFIG += c++11 TARGET = testcretedlibrary CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp DEPENDPATH += /home/amruz/worksharedlib INCLUDEPATH += /home/amruz/worksharedlib LIBS += -L /home/amruz/build-worksharedlib-Desktop_Qt_5_7_0_GCC_64bit-Debug -lworksharedlib
-
@jsulm the pro file of my application which calls the library is
QT += core QT -= gui CONFIG += c++11 TARGET = testcretedlibrary CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp DEPENDPATH += /home/amruz/worksharedlib INCLUDEPATH += /home/amruz/worksharedlib LIBS += -L /home/amruz/build-worksharedlib-Desktop_Qt_5_7_0_GCC_64bit-Debug -lworksharedlib
-
@amruz Add
QT += widgets
Fix the LIBS line (no space between -L and the path):
LIBS += -L/home/amruz/build-worksharedlib-Desktop_Qt_5_7_0_GCC_64bit-Debug -lworksharedlib
-
@jsulm said in creating cpp library using qt:
QT += widgets
can you also help me in writing the main.cpp file..
how to actually call the mainwindow there with the library output in it@amruz You use it as any other library. You're already doing it with Qt.
Just include the header file of your library and use it. For example create an instance of Worksharedlib.#include "sharedlib.h" int main() { ... Worksharedlib lib; lib.show(); ... }
-
@amruz You use it as any other library. You're already doing it with Qt.
Just include the header file of your library and use it. For example create an instance of Worksharedlib.#include "sharedlib.h" int main() { ... Worksharedlib lib; lib.show(); ... }
-
@jsulm said in creating cpp library using qt:
Worksharedlib lib;
lib.show();i used the same way only.. but i am getting error as follows
/home/amruz/worksharedlib/worksharedlib.h:14: error: undefined reference to `vtable for Worksharedlib'
@amruz Will probably not solve that error, but this looks wrong as well:
QT -= gui
Your app is going to show an UI, right? Then it is a gui app:
QT += core gui widgets
Don't forget to rerun qmake after changing pro file and rebuild.
-
@amruz Will probably not solve that error, but this looks wrong as well:
QT -= gui
Your app is going to show an UI, right? Then it is a gui app:
QT += core gui widgets
Don't forget to rerun qmake after changing pro file and rebuild.
-
@jsulm said in creating cpp library using qt:
QT += core gui widgets
this is a console application actually..is that the problem?
@amruz If it is a console application then why do you want to use a library which provides an UI class:
class WORKSHAREDLIBSHARED_EXPORT Worksharedlib:public QWidget { Q_OBJECT public: //Worksharedlib(); Worksharedlib(QWidget *parent = 0); ~Worksharedlib() {} private slots: void handleButton(); void m_buttonClicked(); private: QPushButton *m_button; QLineEdit *m_textbox; QHBoxLayout *layout; QWidget *window; QLabel * label; QWidget *frame; };
?
-
@amruz If it is a console application then why do you want to use a library which provides an UI class:
class WORKSHAREDLIBSHARED_EXPORT Worksharedlib:public QWidget { Q_OBJECT public: //Worksharedlib(); Worksharedlib(QWidget *parent = 0); ~Worksharedlib() {} private slots: void handleButton(); void m_buttonClicked(); private: QPushButton *m_button; QLineEdit *m_textbox; QHBoxLayout *layout; QWidget *window; QLabel * label; QWidget *frame; };
?