2016-10-14 1 views
1

Venant d'un arrière-plan non C++, j'essaye de réécrire quelques projets en utilisant Qt. J'ai besoin de créer une bibliothèque partagée qui abritera des fonctions 'utilitaires' couramment utilisées. Je n'ai pas besoin d'une classe car toutes les fonctions seront statiques, donc je pensais créer un espace de noms qui contiendrait toutes les fonctions, mais accomplir ceci en utilisant le modèle de bibliothèque partagée fourni par Qt ne fonctionne pas. Est-ce possible? Si oui, quelqu'un peut-il me diriger dans la bonne direction? Par exemple, je veux prendre les fonctions Utils ci-dessous et les mettre dans une bibliothèque partagée pour que je n'aie pas à copier les fichiers dans tous les projets où je veux les utiliser.Qt - Bibliothèque partagée contenant des fonctions 'utilitaires'?

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

On ne sait pas pourquoi Qt est utilisé? Quelle partie de Qt sera utilisée dans cette bibliothèque? Quelle fonctionnalité ces fonctions de la bibliothèque dynamique implémentent? – AlexanderVX

+0

Parce que Qt est le framework que j'utilise pour réécrire l'application et j'essaie d'utiliser l'assistant de bibliothèque partagée dans l'EDI Qt Creator. – DonJoe

+0

Je vois que vous avez ajouté du code à la question. Très simpliste. 1. Il y aura une dépendance de Qt elle-même. 2. Si elle ne sera pas utilisée par plus d'une application, je n'essayerais même pas de créer une bibliothèque dynamique avec Qt. 3. Si elle sera utilisée par de nombreuses applications indépendantes mais fabriquées avec la même version de Qt, il y a une raison de faire de la bibliothèque dynamique, si elle est assez grande et complexe pour satisfaire tout le travail. S'il n'est utilisé que par une seule application, vous n'avez pas besoin de bibliothèque dynamique. Le wiki pour vous: https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application – AlexanderVX

Répondre

2

En plus de malheureux inclut dans l'en-tête cela semble un code OK sage. Si vous créez cette bibliothèque en tant que bibliothèque partagée et que la plate-forme utilise le masquage de symbole, vous devez "exporter" les fonctions.

Cela se fait habituellement en ayant un en-tête « export macro », à savoir quelque chose comme ça

#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 

qui est ensuite utilisé pour marquer les symboles qui doivent être visibles à lien temps

#include "utils_export.h" 

namespace Utils { 
    UTILS_EXPORT QString getAppName(); 
} 

fichier .pro de la bibliothèque doit définir la define qui déclenche la partie à l'exportation de la macro

DEFINES += MAKE_UTILS_LIB=1