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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите пожалуйста разобраться с сигналами и найти ошибку.  (Прочитано 3857 раз)
qwyllum
Гость
« : Декабрь 07, 2012, 13:38 »

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

//watchthread.h
Код:
class WatchThread : public QThread
{
     Q_OBJECT
public:
    WatchThread();
    void run();
    void get_event (int fd, const char * target);
signals:
     void writeInfo(char *info);
};

Код:
//watchthread.cpp
void WatchThread::run()
{
   emit writeInfo("Hello!!!");
}

Код:
//dialog.h
class Dialog : public QDialog
{
    Q_OBJECT
   
public:
    explicit Dialog(QWidget *parent = 0 );
    ~Dialog();
    void watch_File();
    char *get_WatchFile();
    void get_event (int fd, const char * target);
    void handle_error (int error);
   
private slots:
    void on_btnBrowse_clicked();
    void on_pushButton_clicked();
public slots:
    void write_WatchInfo(char *info);
private:
    Ui::Dialog *ui;
};
Код:
//dialog.cpp
void Dialog::write_WatchInfo(char *info)
{
ui->listWidget->insertItem(0, QString(info));

}
//main

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    WatchThread thread;
    QObject::connect(&thread, SIGNAL(writeInfo(char *)),
                          &w, SLOT(write_WatchInfo(char *)));
    w.show();
    thread.start();
 
    return a.exec();

}

Выдает:

main.o: In function `main':
main.cpp:(.text.startup+0x84): undefined reference to `vtable for WatchThread'
main.cpp:(.text.startup+0xcb): undefined reference to `vtable for WatchThread'
watchthread.o: In function `WatchThread::WatchThread()':
watchthread.cpp:(.text+0xe): undefined reference to `vtable for WatchThread'
collect2: error: ld returned 1 exit status


Не могу понять, что я делаю не так, т.к. Пример брал отсюда http://www.doc.crossplatform.ru/qt/4.7.x/signalsandslots.html

Подскажите пожалуйста, что я не так делаю?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 07, 2012, 13:41 »

А кто за тебя реализацию конструктора будет писать?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qwyllum
Гость
« Ответ #2 : Декабрь 07, 2012, 13:51 »

А кто за тебя реализацию конструктора будет писать?
Где конкретно?  Если Вы про класс диалога, то конструктор по умолчанию автоматически создается, я просто не писал его сюда, потому что там много текста кроме этого. А если про поток, то там не нужен конструктор - он наследуется от QThread и там нужно только переопределить виртуальный метод run(). До того, как я начал работать с сигналами, все работало хорошо.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Декабрь 07, 2012, 14:22 »

Поучи С++
Записан

ArchLinux x86_64 / Win10 64 bit
qwyllum
Гость
« Ответ #4 : Декабрь 07, 2012, 14:29 »

Поучи С++
Спасибо Вам, конечно, за "глубокую мысль". Не подскажете, что мне именно "поучить"?
Записан
Bepec
Гость
« Ответ #5 : Декабрь 07, 2012, 14:44 »

Перечитай сообщение Пантера - 5 раз.
Перечитай сообщение kuzulis'a - 10 раз.

Мб поймёшь, что эти 2 сообщения об одном и том же, причём первое указывает решение, а второе причину твоей проблемы. 
Записан
qwyllum
Гость
« Ответ #6 : Декабрь 07, 2012, 14:53 »

Перечитай сообщение Пантера - 5 раз.
Перечитай сообщение kuzulis'a - 10 раз.

Мб поймёшь, что эти 2 сообщения об одном и том же, причём первое указывает решение, а второе причину твоей проблемы. 
На первое сообщение я ответил, второе, простите, мне не подходит, т.к. С кодом все в порядке. Я просто не выкладывал часть, не имеющую отношение к проблеме.

Проблема решилась не изучением c++ а чисткой make и moc_* файлов. Все работает. Всем большое спасибо за помощь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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