Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qwyllum от Декабрь 07, 2012, 13:38



Название: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: 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

Подскажите пожалуйста, что я не так делаю?


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: Пантер от Декабрь 07, 2012, 13:41
А кто за тебя реализацию конструктора будет писать?


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: qwyllum от Декабрь 07, 2012, 13:51
А кто за тебя реализацию конструктора будет писать?
Где конкретно?  Если Вы про класс диалога, то конструктор по умолчанию автоматически создается, я просто не писал его сюда, потому что там много текста кроме этого. А если про поток, то там не нужен конструктор - он наследуется от QThread и там нужно только переопределить виртуальный метод run(). До того, как я начал работать с сигналами, все работало хорошо.


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: kuzulis от Декабрь 07, 2012, 14:22
Поучи С++


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: qwyllum от Декабрь 07, 2012, 14:29
Поучи С++
Спасибо Вам, конечно, за "глубокую мысль". Не подскажете, что мне именно "поучить"?


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: Bepec от Декабрь 07, 2012, 14:44
Перечитай сообщение Пантера - 5 раз.
Перечитай сообщение kuzulis'a - 10 раз.

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


Название: Re: Помогите пожалуйста разобраться с сигналами и найти ошибку.
Отправлено: qwyllum от Декабрь 07, 2012, 14:53
Перечитай сообщение Пантера - 5 раз.
Перечитай сообщение kuzulis'a - 10 раз.

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

Проблема решилась не изучением c++ а чисткой make и moc_* файлов. Все работает. Всем большое спасибо за помощь.