Russian Qt Forum
Ноябрь 25, 2024, 22:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не связывается сигнал с слотом  (Прочитано 5783 раз)
Zilibobas
Гость
« : Декабрь 11, 2014, 19:46 »

Код:
QObject::connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(setText("123")));

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Декабрь 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");
}
Записан

Zilibobas
Гость
« Ответ #2 : Декабрь 11, 2014, 21:08 »

Так это вроде стандартный слот элемента, он и так должен выполнятся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Декабрь 11, 2014, 21:51 »

Так это вроде стандартный слот элемента, он и так должен выполнятся

Не должен. Читай http://qt-project.org/doc/qt-4.8/signalsandslots.html
Записан
Zilibobas
Гость
« Ответ #4 : Декабрь 11, 2014, 22:46 »

Так это вроде стандартный слот элемента, он и так должен выполнятся

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

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

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

ui->lineEdit->setText("123");
Записан
Bepec
Гость
« Ответ #5 : Декабрь 11, 2014, 23:18 »

Слот имеет у себя только те данные, которые пришли с сигналом. Типы данных, их порядок в сигнале должен соответствовать слоту, иначе просто не будет соединения.

Если у сигнала есть данные, а у слота нет, то они игнорируются.
А в вашем случае имеет место нарушение этого условия Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Декабрь 11, 2014, 23:44 »

Это же выполняется, это слот вроде, почему я должен его переписывать:
ui->lineEdit->setText("123");

если ты хочешь использовать код прямо в connect(), то используй C++-11 вариант connect с лямбдами (http://qt-project.org/wiki/New_Signal_Slot_Syntax), иначе соединение работать не будет. Потому что SLOT() не выполняет никакого кода.
Записан
Zilibobas
Гость
« Ответ #7 : Декабрь 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. Почему это не верно.
Записан
Zilibobas
Гость
« Ответ #8 : Декабрь 12, 2014, 01:14 »

Слот имеет у себя только те данные, которые пришли с сигналом. Типы данных, их порядок в сигнале должен соответствовать слоту, иначе просто не будет соединения.

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

Игнорируется кем? Если я захочу связать сигнал с кнопки на слот собственного класса и в нем ужже поменять значение поля, так будет работтаь? Я не укажу никаких параметров.
Записан
Zilibobas
Гость
« Ответ #9 : Декабрь 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)
{
}
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Декабрь 12, 2014, 01:54 »

я же не выполняю код прямо

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Декабрь 12, 2014, 12:40 »

попробуй qmake запустить перед сборкой
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Zilibobas
Гость
« Ответ #12 : Декабрь 12, 2014, 13:28 »

попробуй qmake запустить перед сборкой

как?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Декабрь 12, 2014, 21:03 »

в креаторе Build - Run qmake. ну или просто перестрой проект (там же Rebuild All)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.263 секунд. Запросов: 23.