2015-04-15 2 views
2

J'ai une interface utilisateur avec deux boutons. Mon premier bouton a lu un fichier XML. Le deuxième bouton devrait créer une fenêtre et montrer un cercle.Fonction de classe d'appel QT/C++ avec bouton-poussoir

J'ai une mainwindow.h et un cercle.h. Maintenant je veux commencer ma fonction de cercle avec un clic de bouton-poussoir.

Ma fonction cercle:

void circle::paintEvent(QPaintEvent *e) 
{ 

Q_UNUSED(e); 
QPainter painter(this); 

painter.setRenderHint(QPainter::Antialiasing); 
painter.setPen(QPen(QBrush("#888"), 1)); 
painter.setBrush(QBrush(QColor("#888"))); 

qDebug() << "\r\nxarray : " <<"test"; 
for(int z = 0; z < 50; z++) 
{ 
    painter.drawEllipse(10, 10, 100, 100); 
} 
} 

Atm je commence avec:

circle::circle(QWidget *parent) 
: QWidget(parent) 
{} 

Mais je veux commencer avec:

void MainWindow::on_pushButton_clicked(
{} 

Comment puis-je commencer ma fonction avec le bouton poussoir?

[Je viens de commencer à apprendre qt/C++ si im un débutant]

salutations

+0

pourquoi vous avez besoin de cette boucle '' for' dans paintEvent'? –

+0

ceci pour j'ai besoin dans l'étape suivante. ATM je n'ai pas besoin de ça – user3676560

Répondre

3

Dans la fente on_pushButton_clicked() créer une instance de la classe circle et appeler la méthode requise par cette instance.

EDIT:

Je ne sais pas quelle méthode vous avez l'intention de faire appel à la classe de cercle. Mais en supposant que vous avez une fonction appelée myFunc(), le code serait quelque chose comme:

void MainWindow::on_pushButton_clicked() 
{ 
    circle* circleObj = new circle(this); // instance created 
    circleObj->myFunct(); // the necessary actions are done in this function 
    // connect the signals from the circle class if any to the required slots in MainWindow 
    connect(circle, SIGNAL(mySignal()), this, SLOT(mySlot()); 
} 

Puisque vous semblez être complètement nouveau pour Qt regardant vos commentaires, je vous recommande fortement de passer par la documentation et les tutoriels impressionnants à le VoidRealms YouTube channel avant d'aller plus loin.

+0

comment puis-je ajouter une instance de la classe?(sry mais je viens de commencer à apprendre) – user3676560

+0

@ user3676560: Vérifiez mon édition – nnb

0

Qt utilise un système de signaux et de créneaux pour spécifier les actions déclenchées par l'utilisateur. Donc, si vous spécifiez la fonction on_pushButton_clicked vous devez effectuer les opérations suivantes:

  1. Ecrire Q_OBJECT macro au début de votre définition MainWindow (classe contenant une fente)
  2. Ecrire on_pushButton_clicked dans la section private slots: de votre classe (au lieu de la normale private: section)
  3. Écrire un appel à QObject::connect quelque part (éventuellement dans le constructeur) avec la syntaxe suivante: connect (button, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));, lire le manuel Qt pour lequel les signaux sont disponibles.
  4. Réexécutez qmake si vous utilisez Visual Studio.

Plus précisément à faire ce que vous voulez dans votre cas, vous avez probablement besoin de créer un certain drapeau qui sera mis en on_pushButton_clicked fonction et vérifier ce drapeau dans paintEvent.

Informations supplémentaires sur le signal et les fentes de la documentation Qt: http://doc.qt.io/qt-5/signalsandslots.html

+0

il y a un problème de construction: constructeur attendu, destructeur, ou la conversion de type avant «(» jeton – user3676560

+2

@ user3676560 il est difficile de dire exactement quel est le problème sans le code complet, mais il n'est pas conseillé de poster du code complet est ici, donc je vous conseille d'essayer de construire quelques exemples de Qt d'abord parce que cela peut aussi être un problème avec le projet includes/configuration. – Predelnik