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

Qt Discussion :

Impossible de connecter un slot avec le signale loadFinished


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Impossible de connecter un slot avec le signale loadFinished
    Bonjour à tous,

    Je suis débutant sur QT et j'aimerais créer un programme qui convertie du code html en pdf.
    Pour ce faire j'utilise QWebPage pour interpréter le code html et QPrinter pour l'export au format PDF.

    Alors j'ai deux classes : webview qui se charge d'interpréter tout ce qui est relative à QWebpage et Print qui s'occupe de QPrinter.


    Dans mon main, le code ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Print *pdf = new Print(args);
        webview *nav = new webview();
        nav->setPrinter(pdf->getPrinter());
     
        if(nav->load(args) == false) {
            qDebug() << "can't load page";
            return 0;
        }
     
        //on lie le signal de fin de chargement de page de la webview au slot qui va déclencher l'impression
        QObject::connect(nav->getFrame(), SIGNAL(loadFinished(bool)), nav, SLOT(printPDF()));
    et voici la belle erreur que j'ai :

    QObject::connect: No such slot QObject::printPDF() in ../htmltopdf/main.cpp:43
    Voici à quoi ressemble mon webview.h (c'est lui qui contient le slot censé recevoir le signale).

    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
    #ifndef WEBVIEW_H
    #define WEBVIEW_H
     
    #include <QRegularExpression>
    #include <QWebFrame>
    #include <QWebPage>
    #include <QPrinter>
    #include <QDebug>
     
    #include "arguments.h"
     
    class webview : public QObject
    {
     
    public:
        webview();
        ~webview();
        bool load(Arguments *args);
        QWebFrame* getFrame() { return frame;}
        void setPrinter(QPrinter *p) { printer = p;}
     
    public slots:
        void printPDF();
    private:
        QWebPage *page;
        QWebFrame *frame;
        QPrinter *printer;
    };
     
    #endif // WEBVIEW_H
    et donc ma méthode print pdf ressemble tout bêtement à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void webview::printPDF()
    {
        if(printer != 0)
            frame->print(printer);
    }

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Il semblerait que vous ayez oublié de placer la macro Q_OBJECT dans votre header, avant la mention "public:", ce qui règlera sans doute votre problème.

    Bonne journée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    si je fais cela, le compilateur me jette à la compilation avec le message suivant :
    /home/morgan/htmltopdf/webview.cpp:2: error: undefined reference to `vtable for webview'

    (En gros il aime ni mon constructeur ni mon destructeur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    webview::webview()
    {
        page = new QWebPage;
        printer = 0;
    }
     
    webview::~webview()
    {
        delete page;
    }

  4. #4
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Du fait que vous semblez avoir implémenté toutes les méthodes à implémenter, je vous conseille pour ceci de relancer qmake (ou cmake si vous travaillez avec) ou bien de nettoyer complètement le dossier de génération des .o.

    Bonne journée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Effectivement cela fonctionne parfaitement, merci mille fois pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible de changer une valeur avec les signaux et les slots
    Par dimitricouturier dans le forum Débuter
    Réponses: 4
    Dernier message: 27/08/2012, 15h39
  2. Signal/slot avec attributs différents
    Par spirzouf dans le forum Débuter
    Réponses: 13
    Dernier message: 30/09/2011, 21h14
  3. Problème avec un signal/slot
    Par scary dans le forum Qt
    Réponses: 12
    Dernier message: 11/12/2009, 21h20
  4. Signals et Slots avec QextSerialPort
    Par sardik dans le forum Qt
    Réponses: 1
    Dernier message: 05/05/2009, 17h30
  5. Réponses: 3
    Dernier message: 14/04/2009, 14h42

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