2010-02-05 3 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); 
} 

Он работает, но при нажатии на кнопку, Ничего не произошло. Что я делаю не так?

Редактировать: после того, как я получил его, текст на этикетке был больше, чем сам ярлык, поэтому текст обрезался. Я исправил его, добавив ui->label->adjustSize() в определение myclicked().

ответ

8

Вы подключаете сигнал к неправильному объекту. myclicked() не является слотом QLabel, это слот вашего класса Widget. Строка подключения должна быть:

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

Посмотрите на вывод консоли вашей программы. Там должно быть сообщение об ошибке сказав что-то вроде:

Ошибка подключения щелкнули() к myclicked(): Нет такой слот определен в QLabel

Смежные вопросы