Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] Не получаю сигнал от виджета. 
:(
    Опции темы
W4FhLF
Дата 20.1.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



Почему я никак не могу получить сигнал от QLineEdit? Наверное я что-то недопонимаю во всех этих SIGNAL/SLOT, но никак не пойму чего именно... 

Код

#include <QtGui/QApplication>
#include <QtGui/QGraphicsView>
#include <QtGui/QGraphicsScene>
#include <QtGui/QLineEdit>
#include <QtGui/QGraphicsProxyWidget>
#include <QtGui/QDialog>
#include <QtGui/QFormLayout>
#include <QtGui/QMessageBox>

class MyDialog: public QDialog
{
public slots:
    void setSomeText(QString& str);
};

void MyDialog::setSomeText(QString& str)
{
    QMessageBox msg(QMessageBox::Information, str, "Title");
    msg.show();
    msg.exec();
}

class MyView: public QGraphicsView
{
public:
    MyView(QWidget* parent = 0):
        QGraphicsView(parent)
    {}

public slots:
    void setSomeText(QString& str);
};

void MyView::setSomeText(QString& str)
{
    QMessageBox msg(QMessageBox::Information, str, "Title");
    msg.show();
    msg.exec();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyDialog dlg;
    MyView view(&dlg);
    QGraphicsScene scene;
    QLineEdit edit;

    MyView::connect(&edit, SIGNAL(textChanged(QString&)), &view, SLOT(setSomeText(QString&)));
    MyDialog::connect(&edit, SIGNAL(textChanged(QString&)), &dlg, SLOT(setSomeText(QString&)));

    scene.addWidget(&edit);
    view.setScene(&scene);
    
    QFormLayout form;
    form.addWidget(&view);
    dlg.setLayout(&form);
    dlg.show();
    return a.exec();
}



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ecspertiza
Дата 20.1.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



а попробуй так
Код

    a.connect(&edit, SIGNAL(textChanged(QString&)), &view, SLOT(setSomeText(QString&)));
    a.connect(&edit, SIGNAL(textChanged(QString&)), &dlg, SLOT(setSomeText(QString&)));



--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
W4FhLF
Дата 20.1.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



ecspertiza, не работает.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
pan2004
Дата 20.1.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



1. Напишите большими буквами: если создается объект Qt у которого будет parent, то он(объект, а не parent) должен быть создан В КУЧЕ!(heap) через operator new.
Причина: эти объекты будут отслеживаться системой Qt. Как только будет уничтожен родитель, для детей автоматически будет вызван operator delete. К чему это приведет на стеке, догадаться можно наверно самостоятельно) (Segmentation fault).
2. Не вижу причины таким образом создавать мессадж боксы(вообще, разве так можно, я не уверен). У класса QMessageBox есть специальные static функции, не нужно создавать его объект)
исправь пока эти оба пункта, потом посмотрим.

Добавлено через 1 минуту и 37 секунд
Пс да и включи консоль, если с сигналами-слотами чтото не так, весь вывод пойдет туда.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
W4FhLF
Дата 20.1.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



pan2004, в данном конкретном случае вообще всё равно. Это тестовое приложение. В основном проекте все объекты Qt на куче. Просто я взял минимальное кол-во информации и по-быстрому накидал тестовый пример. Так, что я с твоими замечаниями полностью согласен, но с  этими пунктами проблем нет. smile  


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
pan2004
Дата 20.1.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Ну так включи консоль, он мне пишет
Цитата

Object::connect: No such signal QLineEdit::textChanged(QString&)



--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
pan2004
Дата 20.1.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Все ясно? Сигнал называется
Цитата

SIGNAL(textChanged(const QString&))

и соответственно слоты должны быть изменены. Это не говоря отом что ты Q_OBJECT везде позабывал)


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
W4FhLF
Дата 20.1.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



Да ключена она. Надо заглядывать туда чащеsmile Спасибо. С Qt работаю 2 недели только, ещё не освоился. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
cutwater
Дата 21.1.2009, 12:26 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



кстати ф-ция connect возвращает булевое значение, то есть результат выполнения... иногда  полезно комбинировать connect с макросом Q_ASSERT если не ошибаюсь.. чтобы отлаживать неверный коннект.


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.