Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.2.2 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

BasicCalc

Bonjour à tous,

En cette nouvelle année je vous propose de tester ma calculatrice programmable.
Il s’agit de l’adaptation d’une appli OSX, dont je parlais ICI

Vous pouvez consulter la doc et télécharger les sources ICI

Compilé avec Qt 5.6, mais doit fonctionner avec Qt 5.x ( nécessite C++11 )
Tester sur Ubuntu 15.10 et OSX 10.9 (Mavericks)

Non testé sur Windows
A priori, il ne devrait pas y avoir d’incompatibilités, sauf peut-être pour deux fonctions STD non standard:
wcsncasecmp et wcscasecmp
Il s’agit de fonctions qui comparent des wchar sans tenir compte de la casse.

Bug des animations sur Linux
Sur Ubuntu les animations lors du redimensionnement provoquent un déplacement de la fenêtre de la calculatrice vers le bas !
Si vous avez la solution à ce bug, ça m’intéresse fortement :)

N’hésitez pas à me faire part de vos avis et critiques.

Réponses

  • Je test ça dès demain ;)
  • Sur linux mint (17.3), déplacement de la fenêtre vers le haut lors de la réduction par les cotés, mais seulement lorsque la partie contenant le code source du programme se ferme automatiquement à partir d'une certaine largeur. Peut être l'origine du bug ?
  • Salut Joelectronic

    Non, je pense pas que ça soit lié, mais la fermeture automatique est mal géré car je n'attends pas que le bouton de la souris soit relachée (d'où la question posée sur le forum)
    Sous Ubuntu, des fois la fenêtre gigotte vers le haut et vers le bas et des fois rien ne bouge, pas cool ...
  • Bonjour,

    Alors je n'ai pas encore testé le projet car la compilation échoue avec le compilateur microsoft.
    Plusieurs erreurs :
    1)BasicParser.cpp ligne 402

    int maxBuff=100; // pour snprintf
    char buff[maxBuff+1];
    ne pourra pas compiler car maxBuff != const
    donc pour résoudre :
    const int maxBuff=100; 
    2) BasicProg_SET.cpp ligne 268, 271

    int len=WCharLen(attr);
    ...
    char buff[len+2];
    pour la même raison que 1) sauf que là len ne peut pas être déclaré const, donc soit passer par de l'allocation dynamique, soit par un container.

    3) CalcEditor.cpp ligne 173
    return QStr();
    Severity Code Description Project File Line Suppression State
    Error C2561 'CalcEditor::inputQuery': function must return a value BasicCalc D:\dev\BasicCalc v1.0 beta 1\BasicCalc\Widgets\CalcEditor.cpp 173
    remplacer par QStr("")

    4) ExpFunction.cpp ligne 154, 237, ...
    tous les usages de M_PI
    soit inclure math.h et définir _USE_MATH_DEFINES dans le .pro
    soit inclure qmath.h

    5) FilePath.cpp
    remplacer #include par #include si Q_CC_MSVC est définit

    6) StringUtils.cpp ligne 28
    std::towupper
    ne fait pas parti de std
    enlever std
    ligne 35, 40 : wcscasecmp n'est pas reconnu, avec msvc c'est _wcsnicmp

    Il doit sûrement avoir d'autre erreurs.
    Dis moi si tu veux figer une version (un soir) pour que je corrige les erreurs (tout en restant compatible avec les autres compilos)
  • C'est sympa l'aide que tu lui apportes avec explications, c'est grand ^:)^
  • Merci beaucoup pour cette réponse détaillée !

    int maxBuff=100; -> corrigé: const int maxBuff=100;

    char buff[len+2]; -> corrigé: char* buff= new char[len+2];

    return QStr(); -> erreur de ma part

    soit inclure math.h et définir _USE_MATH_DEFINES dans le .pro -> corrigé

    FilePath.cpp remplacer #include <utime.h> par #include ??? si Q_CC_MSVC est défini -> en fait utime n'est pas utilisé,
    j'avais commenté la méthode "touch" mais oublié de commenter l'include

    std::towupper ne fait pas parti de std -> ??? Defined in header <cwctype>

    ligne 35, 40 : wcscasecmp n'est pas reconnu, avec msvc c'est _wcsnicmp
    ok, donc ça devrait être facile à résoudre
    Il doit sûrement avoir d'autre erreurs.
    Dis moi si tu veux figer une version (un soir) pour que je corrige les erreurs (tout en restant compatible avec les autres compilos)
    Je vais essayer de corriger avec tes conseils et pourrait te donner les sources en MP, pour que tu testes ?
  • Pas de soucis.
  • Super !

    En fait le compilo clang sur OSX est assez lâche je trouve, je viens de compiler en mode release avec GCC sur Ubuntu et il m'a trouvé une variable locale non initialisée:
    const WideChar *ExpOperand::getString(const WideChar *exp, WideChar *buffer, int bufferSize, bool keepQuote)
    {
    // en entrée exp pointe le caractère suivant le guillemet
    // ajoute au buffer, les données doivent se terminer par zero pour que la taille (size) soit correcte
    if(bufferSize EQ 0) bufferSize=OperandMaxSize;
    int size=WCharLen(buffer);
    bool esc=false; // escape
    WideChar c; <-- ICI
  • Pour _wcsnicmp , le code suivant devrait convenir:

    #ifdef Q_CC_MSVC
    bool StringUtils::isStringBeginWith(const wchar_t *str1, const wchar_t *str2, int len)
    {
    return (_wcsnicmp(str1,str2,len) EQ 0); // non sensible à la casse
    }

    bool StringUtils::isEqualStrings(const wchar_t *str1, const wchar_t *str2)
    {
    int len1=wcslen(str1);
    int len2=wcslen(str2);

    if(len1 NEQ len2) return false;

    return (_wcsnicmp(str1,str2,len1) EQ 0); // non sensible à la casse
    }
    #else
    bool StringUtils::isStringBeginWith(const wchar_t *str1, const wchar_t *str2, int len)
    {
    return (wcsncasecmp(str1,str2,len) EQ 0); // non sensible à la casse
    }

    bool StringUtils::isEqualStrings(const wchar_t *str1, const wchar_t *str2)
    {
    return (wcscasecmp(str1,str2) EQ 0); // non sensible à la casse
    }
    #endif
  • Salut,

    ton projet compile bien sous msvc avec les dernières modifs que tu as fait.
    Quelques warning qui traînent sur l'utilisation de la méthode size() de tes xstring car la méthode renvoie un size_type
    donc tous les
     int size = mystring.size()
    provoque
    'initializing': conversion from 'size_t' to 'int', possible loss of data
    il y a aussi quelques comparaison comme
    if(condValue.number() EQ false)
    où tu compares un réel avec un bool.

    A part ça tout fonctionne bien en release, en debug je suis tombé sur une assertion ligne 838 de BasicProg.cpp
    if(line.back() EQ EndBlockChar)
    Pour l'utiliser en debug j'ai rajouté :
    if(line .size() > 0 && line.back() EQ EndBlockChar)
    Pour le moment c'est tout
  • 11 Jan modifié
    Salut babaOroms,

    Je cherche comment ajouter des options au compilo pour faire apparaître tous les warnings.
    J'ai essayé dans le .pro
    QMAKE_CXXFLAGS+= -Wall
    mais ça change rien ...
  • Salut,
    au niveau de l'animation,
    je n'ai pas vu de déplacement vers le bas, par contre un petit artefact montré dans l'image.
    jpg
    jpg
    BasicCalc.jpg
    44K
  • 13 Jan modifié
    Tu parles de la barre grise verticale ?
    C'est le SplitterHandle que je n'arrive pas à cacher durant l'animation, il faut que je trouve un moyen de le rendre invisible.

    Sinon, y a un problème avec les caractères π et √
    Si tu tapes :

    chr($03C0)
    et
    chr($221A)

    est-ce que ça affiche les bons caractères ?

    Par contre × et ⏎ s'affichent correctement.
    La police par défaut ne convient pas ...
Connectez-vous ou Inscrivez-vous pour répondre.