Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Zilibobas от Декабрь 11, 2014, 19:46



Название: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 11, 2014, 19:46
Код:
QObject::connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(setText("123")));

Добавил на форму два элемента, пытаюсь их связать вот этой строчкой, компилируется, но при нажатии на кнопке в текстовое поле не вводится значение "123". Вообще ничего не происходит.


Название: Re: Не связывается сигнал с слотом
Отправлено: gil9red от Декабрь 11, 2014, 20:00
Код:
QObject::connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(setText("123")));

Добавил на форму два элемента, пытаюсь их связать вот этой строчкой, компилируется, но при нажатии на кнопке в текстовое поле не вводится значение "123". Вообще ничего не происходит.

И правильно :) Коннект просто задает связь сигнал-слот, или сигнал-сигнал

Напишите слот, в котором будете в lineEdit значение вставлять.

т.е. прмерно так:

Код:
MainWindow::MainWindow(...) {
 ...
 QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(insertText()));
 ...
}

MainWindow::insertText() {
    ui->lineEdit->setText("123");
}


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 11, 2014, 21:08
Так это вроде стандартный слот элемента, он и так должен выполнятся


Название: Re: Не связывается сигнал с слотом
Отправлено: Alex Custov от Декабрь 11, 2014, 21:51
Так это вроде стандартный слот элемента, он и так должен выполнятся

Не должен. Читай http://qt-project.org/doc/qt-4.8/signalsandslots.html


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 11, 2014, 22:46
Так это вроде стандартный слот элемента, он и так должен выполнятся

Не должен. Читай http://qt-project.org/doc/qt-4.8/signalsandslots.html

Я читал. И в переводе.

Это же выполняется, это слот вроде, почему я должен его переписывать:

ui->lineEdit->setText("123");


Название: Re: Не связывается сигнал с слотом
Отправлено: Bepec от Декабрь 11, 2014, 23:18
Слот имеет у себя только те данные, которые пришли с сигналом. Типы данных, их порядок в сигнале должен соответствовать слоту, иначе просто не будет соединения.

Если у сигнала есть данные, а у слота нет, то они игнорируются.
А в вашем случае имеет место нарушение этого условия :)


Название: Re: Не связывается сигнал с слотом
Отправлено: Alex Custov от Декабрь 11, 2014, 23:44
Это же выполняется, это слот вроде, почему я должен его переписывать:
ui->lineEdit->setText("123");

если ты хочешь использовать код прямо в connect(), то используй C++-11 вариант connect с лямбдами (http://qt-project.org/wiki/New_Signal_Slot_Syntax), иначе соединение работать не будет. Потому что SLOT() не выполняет никакого кода.


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 12, 2014, 01:13
Это же выполняется, это слот вроде, почему я должен его переписывать:
ui->lineEdit->setText("123");

если ты хочешь использовать код прямо в connect(), то используй C++-11 вариант connect с лямбдами (http://qt-project.org/wiki/New_Signal_Slot_Syntax), иначе соединение работать не будет. Потому что SLOT() не выполняет никакого кода.

я же не выполняю код прямо,я лишь говрю, что надо вызвать слот setText, у экземпляра lineEdit класса, с параметром "123" В случае нажатия кнопки pushButton. Почему это не верно.


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 12, 2014, 01:14
Слот имеет у себя только те данные, которые пришли с сигналом. Типы данных, их порядок в сигнале должен соответствовать слоту, иначе просто не будет соединения.

Если у сигнала есть данные, а у слота нет, то они игнорируются.
А в вашем случае имеет место нарушение этого условия :)

Игнорируется кем? Если я захочу связать сигнал с кнопки на слот собственного класса и в нем ужже поменять значение поля, так будет работтаь? Я не укажу никаких параметров.


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 12, 2014, 01:27
Ох еще одна напасть новичка, добавил в проект пустой свой класс, тепреь пытаюсь создать экземпляр что я делаю не правльно?

Код:
    cUpdateProgram *UpdateProgram;
    UpdateProgram = new cUpdateProgram;

Ошибку выдает вообще какуюто левую

mainwindow.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl cUpdateProgram::cUpdateProgram(class QObject *)" (??0cUpdateProgram@@QEAA@PEAVQObject@@@Z) в функции "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)

коментишь строку

Код:
    UpdateProgram = new cUpdateProgram;

все ок, что тут не так

Код:
#ifndef CUPDATEPROGRAM_H
#define CUPDATEPROGRAM_H

#include <QObject>

class cUpdateProgram : public QObject
{
    Q_OBJECT
public:
    explicit cUpdateProgram(QObject *parent = 0);

signals:

public slots:

};

#endif // CUPDATEPROGRAM_H

Код:
#include "cupdateprogram.h"

cUpdateProgram::cUpdateProgram(QObject *parent) :
    QObject(parent)
{
}


Название: Re: Не связывается сигнал с слотом
Отправлено: Alex Custov от Декабрь 12, 2014, 01:54
я же не выполняю код прямо

Это конструкцией выполняешь, а вернее пытаешься выполнять. В старом типе connect() это невозможно, просто из-за ограничений С++ и того, что старый connect() для этого не предназначен.


Название: Re: Не связывается сигнал с слотом
Отправлено: kambala от Декабрь 12, 2014, 12:40
попробуй qmake запустить перед сборкой


Название: Re: Не связывается сигнал с слотом
Отправлено: Zilibobas от Декабрь 12, 2014, 13:28
попробуй qmake запустить перед сборкой

как?


Название: Re: Не связывается сигнал с слотом
Отправлено: kambala от Декабрь 12, 2014, 21:03
в креаторе Build - Run qmake. ну или просто перестрой проект (там же Rebuild All)