2012-10-07 11 views
0

J'ai une application simple, qui consiste en une ligne d'édition, où l'utilisateur écrit une réponse et un bouton de confirmation. Si la réponse était correcte, j'aimerais dessiner un chiffre simple (cercle vert/rouge par exemple). J'ai trois fichiers source - principal, forme (ici je connecte le signal du bouton avec la réponse de lineedit et détermine si la réponse est correcte) et figureWidget, où je voudrais dessiner ma figure. Mon problème est, que je ne peux pas trouver comment connecter le signal de "forme" avec mon figureWidget (surtout quoi avec quoi et où :-)) Des conseils? fichier form.cpp:Qt - dessin après avoir reçu le signal

#include <QtCore> 
#include "ui_untitled.h" 
#include "Form.h" 
#include "figureWidget.h" 

Form::Form(QWidget * parent, Qt::WindowFlags f) : QWidget (parent,f) { 
    ui.setupUi(this); 

connect(ui.pushButton, SIGNAL(buttonPressed()), this, SLOT(checkAnswer())) 
//this checks if answer is correct after pushing button 
connect(this,SIGNAL(correctness(QString)),ui.figureWidget, SLOT(drawFigure(QString))); 
    //I expect signal from this class (here I check the answer), and draw the circle in figureWidget 
} 

void Form::checkAnswer() { 
if (ui.lineEdit == "1") emit correctness(QString("right"); 
    else emit correctness(QString("false") 
    } 

alors j'ai l'figureWidget.cpp:

#include <QtGui> 
#include <iostream> 
#include "figureWidget.h" 
figureWidget::figureWidget(QWidget* parent) : QWidget(parent) { 
} 

figureWidget::~figureWidget() { 
} 

void figureWidget::drawFigure(QString newVal) { 
if (newVal == correctVal) 
    update(); 
} 

void figureWidget::paintEvent(QPaintEvent*) { 
    QPainter painter(this); 
    painter.setPen(QRgb(0x0000ff00)); 
    painter.drawEllipse(0, 0, 10, 10); 
} 

en debug je reçois: No such fente QWidget :: drawFigure (QString) dans ...

+0

http://doc.qt.digia.com/qt/signalsandslots.html - Je suis désolé mais votre question est très vague. Vous connectez un signal à un slot, et c'est tout. Si vous avez du code qui ne fonctionne pas comme vous le souhaitez, veuillez montrer ce code afin que les gens puissent vous aider à comprendre ce qui ne va pas. – Mat

+0

Je suis désolé, j'espérais que quelqu'un pourrait comprendre ce que je veux dire (problème peut-être commun). Quoi qu'il en soit, j'ai ajouté le code – Johnzzz

+0

Où est 'checkAnswer'? Où émettre le signal "exactitude"? – Mat

Répondre

0

Je pense que vous pouvez essayer:

connect(this,SIGNAL(correctness(QString)),this, SLOT(drawFigure(QString))); 


void Form::drawFigure(QString val) 
{ 
    ui->figureWidget->drawFigure(val); 
} 

Mais comment pourrait figureWidget apparaît après 'ui ->' ??? Vous ne pouvez pas le dessiner sur l'interface utilisateur de manière statique.

Questions connexes