2010-02-05 4 views
4

J'essaie de créer un programme simple composé d'un bouton et d'une étiquette. Lorsque le bouton est pressé, il devrait changer le texte de l'étiquette à tout ce qui est dans une variable QString à l'intérieur du programme. Voici mon code à ce jour:Modification d'une étiquette dans Qt

Ceci est mon fichier widget.h:

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    Widget(QWidget *parent = 0); 
    ~Widget(); 

private: 
    Ui::WidgetClass *ui; 
    QString test; 

private slots: 
    void myclicked(); 
}; 

Et voici la mise en œuvre de la classe Widget:

#include "widget.h" 
#include "ui_widget.h" 

Widget::Widget(QWidget *parent) 
    : QWidget(parent), ui(new Ui::WidgetClass) 
{ 
    ui->setupUi(this); 
    test = "hello world"; 
    connect(ui->pushButton, SIGNAL(clicked()), ui->label, SLOT(myclicked())); 
} 

Widget::~Widget() 
{ 
    delete ui; 
} 

void Widget::myclicked(){ 
    ui->label->setText(test); 
} 

Il fonctionne, mais lorsque le bouton est cliqué, Rien ne se passe. Qu'est-ce que je fais mal? Edit: après l'avoir fait fonctionner, le texte de l'étiquette était plus grand que l'étiquette elle-même, donc le texte a été coupé. Je l'ai corrigé en ajoutant ui->label->adjustSize() à la définition de myclicked().

Répondre

8

Vous connectez le signal au mauvais objet. myclicked() n'est pas un slot de QLabel, c'est un slot de votre classe Widget. La chaîne de connexion doit être:

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(myclicked())); 

Regardez la sortie de la console de votre programme. Il devrait y avoir un message d'erreur disant quelque chose comme:

Erreur de connexion clicked() à myclicked(): Aucun emplacement défini dans QLabel

Questions connexes