2010-02-05 122 views
4

我正在嘗試製作一個由按鈕和標籤組成的簡單程序。當按下按鈕時,它應該將標籤文本更改爲程序內QString變量的內容。這裏是我到目前爲止的代碼:更改Qt中的標籤

這是我widget.h文件:

class Widget : public QWidget 
{ 
    Q_OBJECT 

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

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

private slots: 
    void myclicked(); 
}; 

而這裏的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); 
} 

它運行按鈕被按下時,但是,什麼都沒發生。我究竟做錯了什麼?

編輯:我得到它的工作後,標籤中的文本大於標籤本身,所以文本被剪輯。我通過將​​添加到myclicked()的定義來修復它。

回答

8

您正在將信號連接到錯誤的對象。 myclicked()不是QLabel的插槽,它是Widget類的插槽。連接字符串應爲:

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

查看程序的控制檯輸出。應該有一個錯誤信息,說是這樣的:

連接錯誤點擊()來 myclicked():在QLabel

定義沒有這樣的插槽