IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

create_pango_layout not declared. Problème de version de gtk ?


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut create_pango_layout not declared. Problème de version de gtk ?
    Bonjour,
    je développe sous raspbian, gtkmm (version 2.xx), c++

    j'ai crée une drawing area et un contexte context , j'y trace différents objets avec succès.

    je veux y intégrer du texte.
    je veux m'inspirer de cela:
    https://developer.gnome.org/gtkmm-tu...g-text.html.en

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void graph::afficheLabels (void){
    Pango::FontDescription font;
    font.set_family("Monospace");
    font.set_weight(Pango::WEIGHT_BOLD);
    auto layout create_pango_layout("Hello");
    layout->set_font_description(font);
    context->move_to(20;20)
    layout->show_in_cairo_context(context)
    }
    la compil me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'create_pango_layout' was not declared in this scope
    au début du fichier, j'ai pour include:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <gtkmm.h>
    #include <pangomm.h>
    soit je n'inclue pas les bonnes lib, soit le create_pango_layout n'existe pas sur ma version de gtkmm, soit ...

    Y a-t-il un équivalent sur les versions précédentes?
    Où avez-vous un exemple pour afficher un texte dans une drawing area pour du gtkmm 2.xx ?
    Ou autres conseils .....

    Merci, bonne journée

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut
    et ben zut,
    je viens de réaliser que je croyais tourner sur gtk3 (par ce que j'utilise opencv3 qui s'appuie sur gtk 3, ey non gtk 2.

    j'ai bien des biblio gtkmm-3.0 dans mon dossier /usr/include (normalement cohabitant sans soucis avec gtkmm-2.4)
    j'ai aussi les biblio pangomm-1.4

    mais, dans mon projet sous code::blocks, quand je fais un #include <gtkmm
    il est vrai que l'autocomplétion ne me propose que du 2.4, pas le 3.0
    et pourtant dans les options de de compil:
    'pkg-config gtkmm-3.0 --cflags'
    et dans le linker settings:
    'pkg-config gtkmm-3.0 --libs'

    Je m'y étais déjà perdu il y a qq semaines, pas très à l'aise avec les options de linkage de manière générale, mais là avec la cohabitation de 2 versions, et je suis à nouveau perdu.

    J'ai l'impression de bosser avec gtkmm3.0, pangomm1.4, mais la fonction create_pango_layout n'est pas définie!

    Une idée pour me sortir de la semoule?

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Bonjour,

    je ne connais pas trop GTKmm, ni C++11, mais à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto layout create_pango_layout("Hello");
    ce ne serait pas plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto layout = create_pango_layout("Hello");
    ?

    Au passage, opencv 3.x ne dépend pas forcément de GTK+ 3, cela dépend de comment il a été compilé. Il gère GTK+ 2, GTK+ 3, et Qt comme backends.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut
    oui, tout à fait, il faut le " = "
    Je n'ai pas pu faire un copier coller alors en retapant les lignes de code j'ai commis cette faute (et peut-être d'autres d'ailleurs)

    ok pour opencv,

    mais je dois tout de même pouvoir inclure le create_pango_layout d'une façon ou d'une autre

    Merci pour ta réponse

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    J'ai un projet code::blocks utilisant gtk3. Tu peux regarder pour comparer les options : http://troumad.org/Mes_regles/perso4_1.zip

    je te conseille aussi de créer un makefile pour tester sans code::blocks. Ils sont aussi dans ma sauvegarde.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut
    Salut,
    liberforce j'ai installé opencv comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    ######################################
    # INSTALL OPENCV ON UBUNTU OR DEBIAN #
    ######################################
     
    # |         THIS SCRIPT IS TESTED CORRECTLY ON         |
    # |----------------------------------------------------|
    # | OS             | OpenCV       | Test | Last test   |
    # |----------------|--------------|------|-------------|
    # | Ubuntu 16.04.2 | OpenCV 3.2.0 | OK   | 20 May 2017 |
    # | Debian 8.8     | OpenCV 3.2.0 | OK   | 20 May 2017 |
    # | Debian 9.0     | OpenCV 3.2.0 | OK   | 25 Jun 2017 |
     
    # 1. KEEP UBUNTU OR DEBIAN UP TO DATE
     
    sudo apt-get -y update
    sudo apt-get -y upgrade
    sudo apt-get -y dist-upgrade
    sudo apt-get -y autoremove
     
     
    # 2. INSTALL THE DEPENDENCIES
     
    # Build tools:
    sudo apt-get install -y build-essential cmake
     
    # GUI (if you want to use GTK instead of Qt, replace 'qt5-default' with 'libgtkglext1-dev' and remove '-DWITH_QT=ON' option in CMake):
    sudo apt-get install -y qt5-default libvtk6-dev
     
    # Media I/O:
    sudo apt-get install -y zlib1g-dev libjpeg-dev libwebp-dev libpng-dev libtiff5-dev libjasper-dev libopenexr-dev libgdal-dev
     
    # Video I/O:
    sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev
     
    # Parallelism and linear algebra libraries:
    sudo apt-get install -y libtbb-dev libeigen3-dev
     
    # Python:
    sudo apt-get install -y python-dev python-tk python-numpy python3-dev python3-tk python3-numpy
     
    # Java:
    sudo apt-get install -y ant default-jdk
     
    # Documentation:
    sudo apt-get install -y doxygen
     
     
    # 3. INSTALL THE LIBRARY (YOU CAN CHANGE '3.2.0' FOR THE LAST STABLE VERSION)
     
    sudo apt-get install -y unzip wget
    wget https://github.com/opencv/opencv/archive/3.2.0.zip
    unzip 3.2.0.zip
    rm 3.2.0.zip
    mv opencv-3.2.0 OpenCV
    cd OpenCV
    mkdir build
    cd build
    cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON -DENABLE_PRECOMPILED_HEADERS=OFF ..
    make -j4
    # retirer -j4 pour ne compiler que sur un coeur, évite des plantages de saturation
    sudo make install
    sudo ldconfig
     
     
    # 4. EXECUTE SOME OPENCV EXAMPLES AND COMPILE A DEMONSTRATION
     
    # To complete this step, please visit 'http://milq.github.io/install-opencv-ubuntu-debian'.
    en faisant bien attention à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # GUI (if you want to use GTK instead of Qt, replace 'qt5-default' with 'libgtkglext1-dev' and remove '-DWITH_QT=ON' option in CMake):
    je ne sais pas si opencv dépend de gtk 2 ou 3 après une telle installation. Sais-tu comment je peux le savoir?



    troumad, nos options sont similaires, sauf que je suis en gtkmm pour c++
    je ne vois aucun #include <gtk dans ton projet

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    C'est au moment de l'appel à cmake que tu dis quel backend (GTK+ 2, GTK+ 3, ou Qt).
    Les paquets de développement du toolit que tu installes sont nécessaires pour pouvoir compiler avec le backend sélectionné, mais ce qui définit avec quoi tu buildes, c'est l'option que tu actives au moment de l'appel à cmake. Lors de l'appel tu devrais avoir des infos qui apparaissent sur la configuration sélectionnée. Ou sinon tu peux utilise cmake-gui dans ton dossier de build pour regarder les options que tu as activées.

    Les options disponibles sont dans le CMakeList.txt à la racine des sources d'opencv. Donc pour opencv 3.2.0, tu as le choix:
    • WITH_GTK → GTK+ 3
    • WITH_GTK_2_X → GTK+ 2
    • WITH_QT → Qt (je ne sais pas comment il trouve la version)


    On voit dans le lien que je donne que WITH_GTK est à "ON" par défaut, donc normalement tu t'es lié à GTK+ 3.

  8. #8
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Pour vérifier a posteriori avec quelle version de GTK+ tu es lié, tu peux aussi faire un ldd sur les bibilothèques d'opencv. De ce que j'ai compris, c'est la lib highgui qui a une dépendance sur la partie graphique et qui est liée à un toolkit. Donc dasn ton dossier de build, cherche le fichier libopencv_highgui.so.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ton_dossier_de_build/ -name libopencv_highgui.so | xargs ldd | grep gtk
    Sur ma version d'opencv installée (ubuntu 14.04), cela me renvoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007fe05bc44000)
    libgtkglext-x11-1.0.so.0 => /usr/lib/libgtkglext-x11-1.0.so.0 (0x00007fe05b234000)
    libgtk-x11 est en version 2.0 → c'est du GTK+ 2.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut
    avec la recherche de dépendance indiquée par liberforce (merci):
    donc opencv lié à gtk3.

    je suis enfin fixé la dessus.

    le mystère reste entier quant à l'impossibilité d'utiliser create_pango_layout.

    à suivre en janvier, merci

  10. #10
    Membre actif
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 43
    Par défaut Petite remarque
    Bonjour à tous,

    Il y a quelque chose qui me choque dans ce code :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto layout = create_pango_layout("Hello");
    layout->set_font_description(font);
    Ici, layout est une structure C de type PangoLayout*, or tu utilise layout comme une class C++ de type Pango::Layout*


    Il me semble qu'il faut écrire, soit :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto layout = create_pango_layout("Hello");
    pango_layout_set_font_description(layout, font);

    Soit :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto layout = Pango::Layout::create("Hello");
    layout->set_font_description(font);

    Soit (de mémoire):
    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    auto c_layout = create_pango_layout("Hello");
    auto layout =  new Glib::RefPtr<Pango::Layout*>(c_layout);
    layout->set_font_description(font);


    Soit (de mémoire):
    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto layout = Pango::Layout::create("Hello");
    pango_layout_set_font_description(layout->operator*, font);

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Par défaut
    hello,
    je n'ai pas réussi à me remettre sur ce problème depuis mon retour de vacances.
    des bugs se sont déclarés et me prennent jours et nuit.
    donc pour le rajout de texte je verrai cela un peu plus tard.

    mais affectivement aeiou, il y des confusions entre C et c++

    j'espère m'y recoller bientôt (ça voudra aussi dire que j'ai résolu le reste ... )

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/12/2013, 18h13
  2. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  3. [Word] Problème de version Word
    Par delphicrous dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/09/2004, 11h19
  4. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo