LINUX.ORG.RU

[непонятно][qt-creator]Qt 4 сигнал-слот


0

1

Пишу свою первую программу на Qt4 при помощи Qt-creator. Бросил кнопку и LCDNumber на форму. Добавил функцию слот, в h-файле объявлена правильно в slots.

Main_W::Main_W(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_W)
{
    ui->setupUi(this);
}

Main_W::~Main_W()
{
    delete ui;
}
void Main_W::changeValue()
{
 /// тут код.
}

а в функцию Main пишу connect.

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Main_W w;
    w.show();
    QObject::connect(&pushButton, SIGNAL(clicked()), Main_W, SLOT(Main_W::changeValue()));
    return a.exec();
}
При компиляции ошибка ... main.cpp:11: error: ‘pushButton’ was not declared in this scope ... main.cpp:11: error: expected primary-expression before ‘,’ token Что не так?

★★★★★

В плюсах не силён, но ‘pushButton’ действительно was not declared in this scope.

Может, передавать что-то вроде w->pushButton. Посмотри исходники, кто генерируются из ui.

vladimir-vg ★★ ()

Смотри, я так понял, у тебя pushButton — часть нагенереного дизайнером юя. Т.е. доступ к нему можно получить через приватный мембер Main_W::ui->pushButton. Исходя из этого ты должен коннектить сигнал со слотом где-то в мембер функции Main_W, например — в конструкторе:

Main_W::Main_W(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_W)
{
    ui->setupUi(this);
    QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(changeValue()));
}
Remington ()

> &pushButton

pushButton уже и так указатель, который, как я догадываюсь, находится в Main_W.ui (Main_W.ui->pushButton). но одно замечание: Main_W.ui — приватное поле (обычно).

> Main_W

а вот Main_W — не указатель.

arsi ★★★★★ ()

> Main_W w;

для QObject-ов (и производных от них) всегда используй динамическое выделение памяти.

Obey-Kun ★★★★★ ()
Ответ на: комментарий от KblCb

Не могу сейчас показать место в документации Qt. Но поверь на слово. Не через new следует делать только всякую фигню, не унаследованную от QObject, типа QPen, QRect и т.п.

Obey-Kun ★★★★★ ()
Ответ на: комментарий от Obey-Kun

QObject можно создавать в стеке.

When QObjects are created on the heap (i.e., created with new), a tree can be constructed from them in any order, and later, the objects in the tree can be destroyed in any order. When any QObject in the tree is deleted, if the object has a parent, the destructor automatically removes the object from its parent. If the object has children, the destructor automatically deletes each child. No QObject is deleted twice, regardless of the order of destruction.

When QObjects are created on the stack, the same behavior applies. Normally, the order of destruction still doesn't present a problem

former_anonymous ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.