Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Как можно понять почему на работают слоты? 
:(
    Опции темы
Elfet
  Дата 31.10.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Приветствую!

Делаю программу на Qt, ввёл в неё свои сигналы и слоты: 
Код

connect(drawarea, SIGNAL(Selected()), this, SLOT(Selected()));
connect(drawarea, SIGNAL(NotSelected()), this, SLOT(NotSelected()));

И всё работало, но затем по непонятной мне причине они перестали работать  smile  smile  smile 
Сингал точно вызывается - это видно по изменению графика на форме. А вот слот не срабатывает.

Как можно понят почему так происходит? 

Я даже вернулся к предыдущей ревизии - всё равно не заработало  smile  smile  smile 

Заранее спасибо.  


--------------------
PM MAIL WWW Skype   Вверх
Acer
Дата 31.10.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



покажи код
PM MAIL   Вверх
Elfet
Дата 31.10.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Вот тут: http://code.google.com/p/smart-flow/source.../mainwindow.cpp
Код

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

    ui->view->setRenderHint(QPainter::Antialiasing, true);

    // Add needed widgets
    drawarea = new DrawArea();
    ui->view->setScene(drawarea);

    // Connections
    connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(Exit()));
    connect(ui->actionImport_from_Fluent2D, SIGNAL(triggered()), this, SLOT(ImportFromFluent2D()));
    connect(ui->actionSave, SIGNAL(triggered()), this, SLOT(Save()));
    connect(ui->actionLoad, SIGNAL(triggered()), this, SLOT(Load()));
    connect(ui->button_zoom_in, SIGNAL(clicked()), this, SLOT(ZoomIn()));
    connect(ui->button_zoom_out, SIGNAL(clicked()), this, SLOT(ZoomOut()));
    connect(ui->button_zoom_actual, SIGNAL(clicked()), this, SLOT(ZoomActual()));

    // Back Connections
    connect(drawarea, SIGNAL(Selected()), this, SLOT(Selected()));
    connect(drawarea, SIGNAL(NotSelected()), this, SLOT(NotSelected()));
...................
}


Код

void DrawArea::mousePressEvent( QGraphicsSceneMouseEvent *event )
{
...........

        if(selectedElement)
        {
            Selected();
            PaintSelected();
        }
        else
        {
            NotSelected();
            UnPaintSelected();
        }
    }
}




--------------------
PM MAIL WWW Skype   Вверх
SABROG
Дата 31.10.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Код

    drawarea = new DrawArea();
    ui->view->setScene(drawarea);
    ...
    // Back Connections
    connect(drawarea, SIGNAL(Selected()), this, SLOT(Selected()));
    connect(drawarea, SIGNAL(NotSelected()), this, SLOT(NotSelected()));



Код

void MainWindow::Update()
{
    try
    {

    delete drawarea;
    drawarea = new DrawArea();
    ui->view->setScene(drawarea);



А кто переконнекчивать будет?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Elfet
Дата 31.10.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



SABROG, что делать?

Добавлено через 38 секунд
SABROG, ааа, понял smile))

Добавлено через 3 минуты и 28 секунд
всё работает smile [+]


--------------------
PM MAIL WWW Skype   Вверх
Acer
Дата 31.10.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



Если бы не мои заветные два слова, ни в чем бы не разобрались smile 
PM MAIL   Вверх
kosmonaFFFt
Дата 31.10.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм... По моему сигналы надо посылать
Код

emit someSignal();

или можно просто вызвать функцию?


--------------------
user posted image
PM MAIL ICQ   Вверх
SABROG
Дата 31.10.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(kosmonaFFFt @ 31.10.2009,  15:30)
Хм... По моему сигналы надо посылать
Код

emit someSignal();

или можно просто вызвать функцию?

Ключевое слово emit это пустой макрос, цель которого повысить читаемость исходных кодов. Своего рода соглашение (coding convention), чтобы другие программисты понимали, что это вызов ни какого нибудь метода, а посылка сигнала. В метаобъектном компиляторе (moc) даже нет такого ключевого слова, которому был бы сопоставлен токен. На деле любой эмитинг сигнала превращается в вызов метода

Код

void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_signal_index, void **argv) 


В котором уже и едет проверка на то ставить ли сигнал в очередь или вызывать слот на прямую, стоит ли блокировка сигналов и тому подобное. Так что работать будет и с ключевым словом emit и без него.

Это сообщение отредактировал(а) SABROG - 31.10.2009, 19:50


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

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

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


 




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


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

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