2016-10-14 5 views
1

비 C++ 배경에서 오는 Qt를 사용하여 몇 가지 프로젝트를 다시 작성하려고합니다. 공통적으로 사용되는 '유틸리티'기능을 갖춘 공유 라이브러리를 만들어야합니다. 모든 기능이 정적 일 것이므로 클래스를 필요로하지 않습니다. 따라서 모든 기능을 포함하는 네임 스페이스를 만드는 것이 내 생각이지만 Qt를 사용하여 공유 라이브러리 템플릿이 작동하지 않습니다. 이것이 가능한가? 그렇다면, 누군가 올바른 방향으로 나를 가리켜 주시겠습니까?Qt - '유틸리티'기능이 포함 된 공유 라이브러리?

예를 들어 Utils 함수를 가져 와서 공유 라이브러리에 저장하여 파일을 사용하려는 모든 프로젝트에 복사 할 필요가 없습니다.

는 Utils.h

#ifndef UTILS_H 
#define UTILS_H 

#include <QtCore> 
#include <QString> 
#include <QDateTime> 
#include <QFileInfo> 

namespace Utils { 
    QString getAppName(); 
    bool stringToBool(const QString &str); 
    QString getFileTimeStamp(); 
    QString getPacketTime(); 
    QString getTodayStamp(); 
} 

#endif // UTILS_H 

Utils.cpp 불행 제외

#include <Helpers/utils.h> 

namespace Utils { 

    QString getAppName() 
    { 
     return QFileInfo(QCoreApplication::applicationFilePath()).baseName(); 
    } 

    bool stringToBool(const QString &str) 
    { 
     return str.contains("1"); 
    } 

    QString getFileTimeStamp() 
    { 
     return QDateTime::currentDateTime().toString("ddhhmmsszzz"); 
    } 

    QString getPacketTime() 
    { 
     return QDateTime::currentDateTime().toString("hh:mm:ss"); 
    } 

    QString getTodayStamp() 
    { 
     return QDateTime::currentDateTime().toString("MMddyy"); 
    } 

} 
+0

Qt가 왜 사용되는지 확실하지 않습니까? 해당 라이브러리에서 Qt의 어떤 부분이 사용될 것입니까? 동적 라이브러리의 이러한 기능이 구현하는 기능은 무엇입니까? – AlexanderVX

+0

Qt는 내가 애플 리케이션을 다시 쓰는데 사용하고 Qt Creator IDE 내에서 공유 라이브러리 마법사를 사용하려고하는 프레임 워크이기 때문에. – DonJoe

+0

질문에 코드를 추가했습니다. 매우 단순합니다. 1. Qt 자체에 의존하게 될 것입니다. 2. 하나 이상의 응용 프로그램에서 사용하지 않으면 Qt로 동적 라이브러리를 만들지 않습니다. 3. 많은 독립적 인 응용 프로그램에서 사용되지만 동일한 Qt 버전으로 만들어진 경우 동적 라이브러리를 수행해야하는 이유가 있습니다. 모든 작업을 만족시킬 정도로 복잡하고 크기가 커야합니다. 하나의 앱에서만 사용하게되면 동적 라이브러리가 필요하지 않습니다. 당신을위한 위키 : https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application – AlexanderVX

답변

2

이 현명 OK 코드를 보이는 헤더에 포함된다.

공유 라이브러리로 이것을 빌드하고 플랫폼이 기호 숨김을 사용하는 경우 함수를 "내 보내야"합니다.

은 일반적으로 다음 링크시 볼 수 있어야 기호를 표시하는 데 사용되는이

#include <qglobal.h> 

#ifndef UTILS_EXPORT 
# if defined(MAKE_UTILS_LIB) 
    /* We are building this library */ 
# define UTILS_EXPORT Q_DECL_EXPORT 
# else 
    /* We are using this library */ 
# define UTILS_EXPORT Q_DECL_IMPORT 
# endif 
#endif 

같은 즉 "수출 매크로"헤더, 무언가를함으로써 이루어집니다

#include "utils_export.h" 

namespace Utils { 
    UTILS_EXPORT QString getAppName(); 
} 

라이브러리의 .pro 파일은 매크로의 내보내기 부분을 트리거하는 define을 설정해야합니다.

DEFINES += MAKE_UTILS_LIB=1