Изменение метки в Qt - PullRequest
       5

Изменение метки в Qt

4 голосов
/ 05 февраля 2010

Я пытаюсь сделать простую программу, состоящую из кнопки и метки. Когда кнопка нажата, она должна изменить текст метки на то, что находится в переменной QString внутри программы. Вот мой код:

Это мой файл 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 ().

1 Ответ

8 голосов
/ 05 февраля 2010

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

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

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

Ошибка при подключении нажал () к myclicked (): в QLabel

такой слот не определен
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...