精华内容
下载资源
问答
  • QT创建一个静态链接库项目,设计各种需要导出的类,包括具有UI的窗体类、对话框类、编译后可以生成一个lib文件(MSVC编译器生成的文件后缀为“.lib”,MinGW编译器生成的文件后缀为“.a”) 在另一个应用程序里使用...

    一、QT的静态链接库

    • QT创建一个静态链接库项目,设计各种需要导出的类,包括具有UI的窗体类、对话框类、编译后可以生成一个lib文件(MSVC编译器生成的文件后缀为“.lib”,MinGW编译器生成的文件后缀为“.a”)
    • 在另一个应用程序里使用这个lib文件和类的头文件(不需要cpp源文件),就可以静态编译到应用程序里
    • 这种方法适合于小组开发时,每个人负责自己的部分,使用其他人设计的代码时只能使用而不能看到源码,便于项目代码的管理

    二、QT静态链接库的创建

    第一步:

    • 点击“File”→“New File or Project”菜单项,选择“Library”中的“C++ Library”

    第二步:

    • 在“Type”中选择“Statically Linked Library”,设置项目名称为“myStaticLib”

    第三步:

    • 接下来选择的是编译器的版本,此处我们选择MSVC2015 645bit版本

    • 选择需要包含的QT模块。

    • 然后来到类定义页面,见下图,我们设置为“QWDialogPen”

    第四步:

    • 这个静态库文件的功能需要自己去设计,可以只实现一个函数功能,也可以设计一个带有UI界面的应用
    • 此处,我们将静态库文件设计为一个带有UI界面的对话框,然后将其封装为静态库文件给其他项目调用。这个UI对话框的代码我们在别处已经定义好了,因此我们将那个项目的代码直接复制到这个静态库项目的目录下(.ui文件也复制过来)
    • 那个项目是一个基于QDialog的对话框,用于设计字体,并且类名也为QWdialogPen。见下图

    • 我们直接将那个项目的“qwdialogpen.h”、“qwdialogpen.cpp”、“qwdialogpen.ui”复制到此静态库项目的文件夹下(类名都是相同的直接覆盖)

    • .h内容如下
    namespace Ui {
    class QWDialogPen;
    }
    
    class QWDialogPen : public QDialog
    {
        Q_OBJECT
    private:
        QPen m_pen; //成员变量
    public:
        explicit QWDialogPen(QWidget *parent = 0);
        ~QWDialogPen();
        void setPen(QPen pen); //设置QPen,用于对话框的界面显示
        QPen getPen(); //获取对话框设置的QPen的属性
        static QPen getPen(QPen iniPen,bool &ok); //静态函数
    private:
        Ui::QWDialogPen *ui;
    };
    • .cpp内容如下
    void QWDialogPen::setPen(QPen pen)
    {
        m_pen=pen;
        ui->spinWidth->setValue(pen.width()); //线宽
        int i=static_cast<int>(pen.style()); //枚举类型转换为整形
        ui->comboPenStyle->setCurrentIndex(i);
        QColor color=pen.color();
        ui->btnColor->setAutoFillBackground(true); //设置颜色按钮的背景色
        QString str=QString::asprintf("background-color:rgb(%d,%d,%d);",
                                      color.red(),color.green(),color.blue());
        ui->btnColor->setStyleSheet(str);
    }
    
    QPen QWDialogPen::getPen()
    {   //获得设置的属性
        m_pen.setStyle(Qt::PenStyle(ui->comboPenStyle->currentIndex()));
        m_pen.setWidth(ui->spinWidth->value());
        QColor color=ui->btnColor->palette().color(QPalette::Button);
        m_pen.setColor(color);
        return m_pen;
    }
    
    QPen QWDialogPen::getPen(QPen iniPen, bool &ok)
    {   //静态函数,获取QPen
        QWDialogPen *Dlg=new QWDialogPen; //创建一个对话框
        Dlg->setPen(iniPen); //设置初始化QPen
        QPen pen;
        int ret=Dlg->exec(); //弹出对话框
        if(ret==QDialog::Accepted)
        {
            pen=Dlg->getPen();
            ok=true;
        }
        else
        {
            pen=iniPen;
            ok=false;
        }
        delete Dlg; //删除对话框对象
        return pen; //返回设置的QPen对象
    }
    
    • 复制之后重新生成项目,并且右击静态库项目“Add Existing Files”将.ui文件添加进去

    第五步:

    项目文件(.pro)的内容如下

    • TEMPLATE定义项目模板是库,而不是应用程序
    • CONFIG:配置项目为静态库
    • TARGET:定义项目编译后生成的目标文件名称为myStaticLib
    QT       += widgets
    #QT       -= gui //这一行注释掉
    
    TARGET = myStaticLib
    TEMPLATE = lib
    CONFIG += staticlib
    
    DEFINES += QT_DEPRECATED_WARNINGS
    
    SOURCES += \
            qwdialogpen.cpp
    
    HEADERS += \
            qwdialogpen.h
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }
    
    FORMS += \
        qwdialogpen.ui

    第六步:

    • 将项目在MSVC2015 64bit编译器版本下的debug和release模式下分别编译

    • 编译时会出现这个对话框,不需要理会,因为静态库项目没有可执行的程序

    • 然后再对应的的build目录下会生成.lib文件,这个就是我们最终生成的静态库文件(注意debug版本的lib文件不会再文件名后加一个字符“d”)

    三、静态库文件的使用

    第一步:

    • 新建一个名为“LibUser”的项目,项目是一个基于QMainWindows的应用程序,类名为“setPen”。
    • 在项目源程序目录下新建一个include目录(这个目录名称自己设计)

    然后根据使用的编译器复制不同的文件

    • 若使用MSVC编译器:将静态库项目myStaticLib下的qwdialogpen.h、release版本的myStaticLib.lib复制到这个include目录下、将debug版本的myStaticLib.lib更名为myStaticLibd.lib复制到这个include目录下,以便于程序在debug和release模式下编译时调用特定类型的文件
    • 若使用MinGW编译器:就将libmyStaticLib.a和libmyStaticLibd.a(debug版本)复制到include目录里

    第二步:

    • 右击项目,添加库文件

    • 然后选择第二项

    • 然后选择静态库文件,Include path会自动填充;然后选择Windows系统;选择Dynamic模式,勾选“Add “d” suffix....”使得在debug模式下编译应用程序时将自动调用debug版本的库文件myStaticLibd.lib

    • 然后会在项目文件中自动添加以下内容

    第三步:

    • 右击项目,运行一下“Run qmake”
    • 在项目文件中添加我们刚才添加的静态库头文件,这样才可以使用里面的内容

    第四步:

    • 在项目中定义一个mPen成员和paintEvent函数

    第五步:

    • 开始设计LibUser项目,在工具栏添加一个Action工具栏按钮,这个按钮等下用来调用我们静态库中的字体对话框

    • 编写Action对象的triggered函数,在此函数中调用我们的qwdialogpen类的getPen函数打开字体设置对话框,并进行操作
    void MainWindow::on_action_Pen_triggered()
    {
        bool ok=false;
        QPen pen=QWDialogPen::getPen(mPen,ok);
        if(ok)
        {
            mPen=pen;
            this->repaint();
        }
    }
    • 定义paintEvent函数
    void setPen::paintEvent(QPaintEvent *event)
    {
        Q_UNUSED(event);
        QPainter painter(this);
        QRect rect(0,0,width(),height());
        painter.setViewport(rect);
        painter.setWindow(0,0,100,50);
        painter.setPen(mPen);
        painter.drawRect(10,10,80,30);
    }

    运行结果:

    • 本案例是将一个可视化的对话框QWDialogPen封装到一个静态库里,当然也可以将任何C++类、函数封装到静态库,其方法是一样的
    展开全文
  • Qt如何使用lib库封装界面一(Qt5动态链接库创建和使用)
  • 报下面的错,无法进行编译 Internal Error: Could not...Error while building/deploying project untitled11 (kit: Android for armeabi (GCC 4.8, Qt 5.4.0)) When executing step “Build Android APK”解决办法:

    创建lib工程选择kits : armeabi-v7a
    报下面的错,无法进行编译
    Internal Error: Could not find .pro file.
    Error while building/deploying project untitled11 (kit: Android for armeabi (GCC 4.8, Qt 5.4.0))
    When executing step “Build Android APK”

    解决办法:
    修改.pro文件

    TEMPLATE = lib  # for the Desktop (Lin/Win/Mac) this is a "lib"
    
    android {
        TEMPLATE = app  # for Android this is an "app"
    }
    展开全文
  • lib:(创建一个用于构建库的Makefile)。 #TEMPLATE = lib CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt TARGET = detect #指定目标文件的名称 DESTDIR += ../bin #指定在何处放置目标文件 #system ...
    TEMPLATE = app #模板变量告诉qmake为这个应用程序生成哪种makefile .app(创建一个用于构建应用程序的Makefile(默认)。lib:(创建一个用于构建库的Makefile)。
    #TEMPLATE = lib
    CONFIG += console c++11
    CONFIG -= app_bundle
    CONFIG -= qt
    TARGET = detect #指定目标文件的名称
    DESTDIR += ../bin #指定在何处放置目标文件
    
    #system
    INCLUDEPATH += /usr/local/lib \
                   /usr/lib/x86_64-linux-gnu
    LIBS += -L/usr/local/lib
    
    #opencv
    INCLUDEPATH += /usr/local/include \
                   /usr/local/include/opencv \
                   /usr/local/include/opencv2/
    #LIBS += /usr/local/lib/libopencv_*.so
    LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_videoio \
                              -lopencv_highgui -lopencv_imgproc
    #caffe
    INCLUDEPATH += ../3rdparty/Caffe-Mobilenet-YOLOV3/include
    LIBS += -L../3rdparty/Caffe-Mobilenet-YOLOV3/lib -lcaffe
    
    #cuda cudnn
    INCLUDEPATH += /usr/local/cuda/include
    LIBS += -L/usr/local/cuda/lib64 #指定链接到项目中的库列表。
    LIBS += -lcudart -lcublas -lcurand
    
    #caffe addition
    LIBS += -lglog -lgflags -lprotobuf -lboost_system -lboost_thread -llmdb -lleveldb -lstdc++ -lcblas -latlas -lcudnn
    
    INCLUDEPATH += \ #指定编译项目时应该被搜索的include目录
            ../include
    
    HEADERS += \   #指定项目中所有的头文件。
        ../include/Detector.h
    SOURCES += \ #指定项目中所有源文件
            ../src/main.cpp \
            ../src/Detector.cpp
    #当前路径默认是在DESTDIR 目标文件路径
    
    

     

    展开全文
  • QT创建共享库及调用方式详解(代码+图)

    通过QT可创建共享库,即Windows平台上的动态链接库,动态链接库项目编译后产生DLL库,使用的DLL库的好处是便于软件维护,更新DLL库后,只要接口名称未变,应用程序仍然可以调用。
    而QT共享库的调用方式有两种形式,分别为隐式链接、显式链接。隐式链接主要在同一编程软件中使用,需要动态的库文件和.h头文件,并且知道DLL库函数名和函数原型;显式链接只需要知道函数名和函数原型即可,在应用程序运行时才会加载共享库的文件。本文主要介绍隐式链接的调用方式,接下来本文将详细介绍QT创建共享库及调用方式:

    创建共享库

    打开Qt Creator,点击文件下新建文件或项目;
    QT创建共享库及调用方式
    选择Library、C++库,点击Choose;
    QT创建共享库及调用方式
    类型选择共享库,填入项目名称和创建路径,点击下一步;
    QT创建共享库及调用方式
    点击下一步;
    QT创建共享库及调用方式
    本例不进行界面显示,所以这里选择QtCore即可,点击下一步;
    QT创建共享库及调用方式
    填入类名,头文件和源文件会随之变化,点击下一步;
    QT创建共享库及调用方式
    点击完成;
    QT创建共享库及调用方式
    myshared_lib.cpp源文件只简单地输出数字:

    #include "myshared_lib.h"
    int Myshared_lib::print()
    {
        int num=6;
        return num;
    }
    

    myshared_lib.h头文件对函数进行声明,函数为static类型,在应用工程函数中调用库中print()函数不需要再实例化:

    #ifndef MYSHARED_LIB_H
    #define MYSHARED_LIB_H
    
    #include "myshared_lib_global.h"
    #include <QDebug.h>
    
    class MYSHARED_LIBSHARED_EXPORT Myshared_lib
    {
    public:
        static int print();
    };
    #endif // MYSHARED_LIB_H
    

    自动生成的myshared_lib_global.h文件,定义符号MYSHARED_LIBSHARED_EXPORT用于替代QT的宏Q_DECL_EXPORT或者Q_DECL_IMPORT。共享库给用户使用的类、函数等通过Q_DECL_EXPORT导出。应用程序通过Q_DECL_IMPORT导入共享库中可用对象:

    #ifndef MYSHARED_LIB_GLOBAL_H
    #define MYSHARED_LIB_GLOBAL_H
    
    #include <QtCore/qglobal.h>
    
    #if defined(MYSHARED_LIB_LIBRARY)
    #  define MYSHARED_LIBSHARED_EXPORT Q_DECL_EXPORT
    #else
    #  define MYSHARED_LIBSHARED_EXPORT Q_DECL_IMPORT
    #endif
    
    #endif // MYSHARED_LIB_GLOBAL_H
    

    此时在Debug或Release下编译生成DLL库。在生成.dll文件的同时,根据编译器的不同,另外生成的一个文件也有所区别。MSVC编译器生成.lib文件,MinGW编译器生成.a文件。本文以MinGW编译器为例进行接下来的调用共享库讲解。

    调用共享库

    新建应用工程后,在工程文件目录新建include文件夹,将myshared_lib_global.h、myshared_lib.h头文件、编译生成的myshared_lib.dll、debug模式下生成的libmyshared_libd.a(人为在文件名后加个字母d)、release模式下生成的libmyshared_lib.a全部放入到include文件夹中;
    QT创建共享库及调用方式
    在QT中,应用工程名旁右键单击选择添加库…,选择外部库,点击下一步;
    QT创建共享库及调用方式
    填入库文件、包含路径,选择Windows平台,动态链接,完成后点击下一步;
    QT创建共享库及调用方式
    点击完成,此时在lib_test.pro文件中会自动添加如下一段代码,在debug或者release方式下可自动编译进相应的.a文件;
    QT创建共享库及调用方式
    应用程序中的.h文件中加入代码:

    #include "myshared_lib.h"
    

    在源文件函数中调用静态库中的函数:

    int num=0;
    num=Myshared_lib::print();
    qDebug()<<num;
    

    编译执行,输出结果:

    6
    

    调用QT静态库成功!

    展开全文
  • 1.2使用Qt创建OpenCV项目

    千次阅读 2018-04-16 14:23:54
    本文介绍在Win7 64位电脑上利用Qt创建OpenCV项目。 Qt是一个完整的C++集成开发环境(IDE)。Qt的安装这里就不介绍了。 创建项目  运行Qt Creator,新建一个新的项目。如下图所示。  创建完一个空的控制台...
  • qt创建SOCKET编译报错

    2016-03-23 08:58:41
    ![图片说明]...为什么用QT在windows下创建SOCKET套接字会报错,是不是编译器的问题啊,找来找去找不到问题啊。。。。。求大神相助,网络编程新手,还有就是我已经确定包含了WS2_32.lib
  • qt 创建表格

    千次阅读 2019-05-11 00:07:00
    g++ hello2.cpp -I/opt/bin/qt570/5.7/gcc_64/include -o hello.o -fPIC -L /opt/bin/qt570/5.7/gcc_64/lib/ -lQt5Core -lQt5Widgets -lQt5Gui #include <QtWidgets/QApplication> //#include //#include <QtGui/...
  • Qt创建对话框

    千次阅读 2014-04-16 15:35:22
    /usr/bin/moc-qt4 -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I...
  • 本次和大家分享的是在Ubuntu下使用Qt生成共享库以及在Qt中链接共享库的方法。 共享库是在Linux下的称呼,在Windows下被称为动态库。这块大家需要了解的是程序在编译时使用的库和程序在运行时使用的库需要...
  • QT创建应用程序插件

    2017-05-04 09:18:22
    创建插件要先创建接口,接口就是一个类,只包含纯虚函数,插件类要继承自该接口。插件类存储在一个共享库中,因此可以在应用程序运行时加载。
  • 在用Qt qmake编译自定义控件时,Qt只生成DLL文件,但未生成LIB文件,其原因有可能是: dll、lib是msvc编译器才能生成的的,使用mingw生成的是.dll、.a文件!!! 另外,值得注意的是: 每个Qt库bin目录的designer...
  • Qt创建动态库

    千次阅读 2014-04-14 09:47:24
    本文通过两个简单的例子演示了如何使用Qt创建基于Qt应用及本地应用的动态链接库。 1. 创建基于Qt GUI应用的动态库 1.1. 创建动态库 1.1.1. 启动Qt Creator依次选择 “文件/新建文件或工程...”,在弹...
  • 使用Qt创建OpenCV项目

    千次阅读 2013-08-26 20:33:46
    Qt编译器:MSVC2010 Qt版本:5.1 在http://opencv.org/下载最新版本opencv安装,根据自己系统和编译器把opencv\build\x86\vc10\bin类似路径加入系统变量。 使用Qt Creator新建子目录项目,取名opencv 新建子项目,...
  • 使用Qt创建一个OpenCV工程

    千次阅读 2013-05-28 15:27:50
    要使用Qt创建一个工程 需要以下几步: 第一步:下载安装并配置OpenCV版本; 我用的是OpenCV2.43版本,好像2.2以后的版本可以不用自己编译,使用安装解压出来的库就可以了. 第二步:下载安装并配置Qt 我用的是5.02版本...
  • QT创建自己的静态库并使用

    千次阅读 2017-12-15 23:17:50
    QT创建自己的C++动态库 原文: http://note.youdao.com/noteshare?id=9af4d0ccd871830fdfee4a4584342d92&sub=0572CDAE544E489C94AA17C0BC3A9BFE 1. 使用QT新建静态库工程1.1 创建库 2. 给静态库添加方法 3. 将...
  • Qt创建shared library

    2010-06-18 00:27:00
    前段时间说了Qt一些类库的使用,今天来换一下口味,来看一下程序设计的问题。今天来说的是关于共享库 shared library。 如果你打开一些 Windows 应用程序的目录,你会发现有很多程序的 exe 文件都很小,...
  • 使用Qt创建动态和静态链接库

    千次阅读 2015-05-17 20:34:28
    一、创建静态链接库 静态链接库是将函数和数据编译成的一个二进制文件,Linux下的静态链接库是*.a文件,而在Windows下的静态链接库...在Qt创建静态库文件的主要步骤如下: 1、新建一个创建C++库文件项目;
  • 在安装Qt的时候,在大家安装Qt的文件下,可以找到 macdeployqt 脚本 在命令行下 cd 进入这个目录。然后运行 ./macdeployqt /Users/XXX/QtProject/build-QDemo-Desktop_Qt_5_10_0_clang_64bit-Debug/QDemo.app -dmg ...
  • QT创建与调用Dll方法

    千次阅读 2016-11-16 16:12:38
    创建QT中的一个DLL,如下图选择: 效果如图所示: 下面是代码: dll.h:: #ifndef DLL_H #define DLL_H #include using namespace std; #include "dll_global.h" class DLLSHARED_EXPORT Dll { public : Dll(); ...
  • dll开发环境:qt5.5.1,编译环境 msvc2010 32bit dll测试环境:qt5.5.1 前言,看到网上很多相关的帖子,但是有些小细节介绍的不够详细,所以想写一篇入手篇,以供新手参考;相关代码也一起上传了 另外注意,如果...
  • QT创建c/c++动态库

    千次阅读 2017-05-11 17:35:49
    记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1.创建动态链接库 先新建一个库项目 选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld 再点击下...
  • linux下qt创建so文件,并调用

    千次阅读 2019-08-17 13:34:49
    1:用qtCreator创建一个so项目 先创建库文件,创建库文件->C++ Libiary,选动态库,选存放路径,填写程序名称,下一步,由于我这边安装了交叉编译环境 这里出现两个选项,一个创建本机pc上的so文件,一个创建...
  • 新建一个Qt WidgetsApplication项目 点击项目不把shadow build勾选去掉  在开始之前先分析一下 dll 在什么时候需要,我们写程序的时候两个地方需要,一个是编译的时候,一个是 exe 文件运行的时候,那么因此,我们...
  • Qt创建和使用动态链接库

    万次阅读 2011-11-19 13:54:39
    一、创建共享库 1、新其他建项目,选择C++库 2、选择共享库,并取项目名称,单击下一步。这里取名位mylib 3、按默认配置单击下一步至模块选项,选择所需支持的模块。这里勾选Qtcore和QtGui。 ...
  • Qt创建第一个工程本来想命名为hello world,结果想换一个名字于是就写了first结果一编译傻眼了,Circular 原来创建Qt工程不能使用first这个名字

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,626
精华内容 7,850
关键字:

libqt创建