2010-02-05 57 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

定义没有这样的插槽