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


  • Lifetime Qt Champion

    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 pi

    i 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


  • Moderators

    @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



  • This post is deleted!


  • @jsulm
    sharedlib.pro

    #-------------------------------------------------
    #
    # 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..


  • Moderators

    @amruz This is your shared lib, I'm talking about your app which uses the lib.


  • Moderators

    @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
    
    

  • Moderators

    @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


  • Moderators

    @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'


  • Moderators

    @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?


  • Moderators

    @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;
    };
    

    ?



  • @jsulm which application should i use to test this library?


  • Moderators

    @amruz gui?



  • @jsulm do you mean qt widget application?


  • Moderators

    @amruz Yes. You're using widgets - so it must be a gui application with widgets, right?

    QT += core gui widgets
    


  • @jsulm when i try to include this library in a widget application also i am getting the same error..

    this is the .pro file of my widgetapplication

    #-------------------------------------------------
    #
    # Project created by QtCreator 2017-07-27T17:19:21
    #
    #-------------------------------------------------
    
    QT       += core gui widgets
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = sharedlibtryinwidget
    TEMPLATE = app
    
    
    SOURCES += main.cpp\
            mainwindow.cpp
    
    HEADERS  += mainwindow.h
    
    DEPENDPATH += /home/amruz/worksharedlib
    INCLUDEPATH += /home/amruz/worksharedlib
    LIBS += -L/home/amruz/build-worksharedlib-Desktop_Qt_5_7_0_GCC_64bit-Debug -lworksharedlib
    
    
    


  • @amruz i also found that when destructor is not included this type of error may occur..but when i added destructor also the same problem exists



  • @jsulm it worked finally! thanks a lot for all the help

    the problem was qobject in the library , i removed it and it worked.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.