crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> СИГНАЛ в главном потоке, СЛОТ - в дочернем, Как правильно связать?
pelican
  опции профиля:
сообщение 31.8.2009, 16:06
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 15
Регистрация: 31.8.2009
Из: Россия, г. Кострома.
Пользователь №: 1038

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет всем! Собственно, вопрос в заголовке...
Я пытался вызвать connect() в конструкторе класса главного окна. Сам класс потока объявлен в отдельном заголовке.
...
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ...
    connect(ui->actionOpen, SIGNAL(triggered()), addThread, SLOT(add()), Qt::QueuedConnection);
    ...
}
...

Проект компилируется, запускается, но connect() не срабатывает и консоль выводит:
Object::connect: No such slot QThread::add() in .\mainwindow.cpp:28
Object::connect:  (sender name:   'actionOpen')

В потоковой функции run(), только функция exec() (извините за тавтологию).
Подозреваю, что connect() лучше вызвать в run(). Но, чтобы не "лепить", решил спросить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 31.8.2009, 16:23
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


pelican,
по-моему библиотека говорит тебе что нет может слот найти. причем тут в каком месте ты соединяешь сигнал со слотом.
Шлее пишет что можно соединять где хочешь.(зачеркнуто, я этого не говрил. :) )

Сообщение отредактировал kwisp - 31.8.2009, 16:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pelican
  опции профиля:
сообщение 31.8.2009, 16:30
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 15
Регистрация: 31.8.2009
Из: Россия, г. Кострома.
Пользователь №: 1038

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
по-моему библиотека говорит тебе что нет может слот найти. причем тут в каком месте ты соединяешь сигнал со слотом.
Шлее пишет что можно соединять где хочешь.

Да, это я понял, но слот есть! Только в файле класса потока "addthread.cpp". Почему слот ищется в "mainwindow.cpp"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 31.8.2009, 16:33
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


вот
пользуйся поиском:)

Сообщение отредактировал kwisp - 31.8.2009, 16:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pelican
  опции профиля:
сообщение 31.8.2009, 16:43
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 15
Регистрация: 31.8.2009
Из: Россия, г. Кострома.
Пользователь №: 1038

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
вот

:yes: Это я видел...
Ладно, сам лопатить буду. :sad2:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.8.2009, 17:44
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(pelican @ 31.8.2009, 20:06) *
Object::connect: No such slot QThread::add() in .\mainwindow.cpp:28
по моему выделенное более интересно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pelican
  опции профиля:
сообщение 1.9.2009, 12:44
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 15
Регистрация: 31.8.2009
Из: Россия, г. Кострома.
Пользователь №: 1038

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 31.8.2009, 18:44) *
Цитата(pelican @ 31.8.2009, 20:06) *
Object::connect: No such slot QThread::add() in .\mainwindow.cpp:28
по моему выделенное более интересно

Вкурил доки - добавил Q_OBJECT в определение класса потока, подтесал ещё кое-что по мелочам. И всё заработало! :) Спасибо за внимание.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gigabyte
  опции профиля:
сообщение 1.9.2009, 17:05
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 9.8.2009
Пользователь №: 992

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(pelican @ 1.9.2009, 12:44) *
Цитата(Litkevich Yuriy @ 31.8.2009, 18:44) *
Цитата(pelican @ 31.8.2009, 20:06) *
Object::connect: No such slot QThread::add() in .\mainwindow.cpp:28
по моему выделенное более интересно

Вкурил доки - добавил Q_OBJECT в определение класса потока, подтесал ещё кое-что по мелочам. И всё заработало! :) Спасибо за внимание.

В идеале результат можно было бы выставить сюда в виде заголовка класса, чтоб те у кого появится эта проблема в дальнейшем видели решение, а не по новой плодили подобные темы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pelican
  опции профиля:
сообщение 1.9.2009, 17:31
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 15
Регистрация: 31.8.2009
Из: Россия, г. Кострома.
Пользователь №: 1038

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(gigabyte @ 1.9.2009, 18:05) *
В идеале результат можно было бы выставить сюда в виде заголовка класса, чтоб те у кого появится эта проблема в дальнейшем видели решение, а не по новой плодили подобные темы

#ifndef ADDTHREAD_H
#define ADDTHREAD_H

#include <QThread>
#include <QMutex>
#include <QStringList>

class AddThread : public QThread
{
    Q_OBJECT

public:
    AddThread();
    ~AddThread();

protected:
    void run(void);

private:
    QMutex mutex;

public slots:
    void open(QStringList filelist);
    void add(QStringList filelist);

};

#endif // ADDTHREAD_H
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
reich
  опции профиля:
сообщение 2.9.2009, 9:41
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 966

Спасибо сказали: 1 раз(а)




Репутация:   0  


Без определения макроса Q_OBJECT в классе не будут доступны ключевые слова Qt типа signals, slots, emit и т.п. Потому, не забывайте определять Q_OBJECT в том классе, в котором хотите использовать сигналы/слоты
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 13:34