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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по QObject::connect  (Прочитано 5229 раз)
Dmitry_Panoff
Гость
« : Ноябрь 26, 2005, 13:30 »

Детский вопрос, который аж стыдно спрашивать... Улыбающийся
Qt-4.0.1-opensource, MS Win, MinGW-3.1.что-то-там

Есть приложение из 3-х файлов: postscan.h - сгенеренный из формы postscan.ui uic'ом, postscan.cpp - собственно реализация класса и  main.cpp:

postscan.h (добавил объявление функций и наследование от QWidget) :
Код:
class Ui_PostScan: public QWidget
{
public slots:
  void selectDialog();

public:
  Ui_PostScan();
  ~Ui_PostScan();
  QStringList createFullFileList(QString dir_name);
  QStringList createQueryFileList(QStringList files);
  QStringList createAnswerFileList(QStringList files);
  void createFinalFileList(QString dir_name);


postscan.cpp:
Код:

#include "postscan.h"
#include <iostream>
using namespace std;

void Ui_PostScan::selectDialog()
{
  listEdit->append("Yeah!");
  cout<<"Yeah!";
}
Ui_PostScan::Ui_PostScan()
{
        setupUi(this);
        cout<<"PostScan constructor\n";
connect(openButton,SIGNAL(clicked()),this,SLOT(selectDialog()));
        noAnswerRadio->setChecked(TRUE);
}


Так вот, connect вроде как соединяет сигнал со слотовой функцией (компилятор не ругается), но при нажатии оной кнопки ничего не происходит и предупреждение об отсутствии слота тоже не выдается. Но если же вместо selectDialog() прописать например close(), то приложение по нажатию кнопки закрывается.  
Пробовал коннектить в main'е - то же самое...
В чем дело, что не так, где ошибка?
Записан
SLiDER
Гость
« Ответ #1 : Ноябрь 26, 2005, 13:53 »

Господа, ну сколько можно. Неужели нынче принято не читать документацию, ну или, хотя бы, книжки. Там же везде про этот несчастный макрос (Q_OBJECT) перво на перво рассказывается в теме посвященной сигналам и слотам. Просто не прилично уже.  :evil:
Записан
Dmitry_Panoff
Гость
« Ответ #2 : Ноябрь 26, 2005, 19:46 »

Цитата: "SLiDER"
Господа, ну сколько можно. Неужели нынче принято не читать документацию, ну или, хотя бы, книжки.

Ткните меня пожалуйста мордой в толковую книгу по Qt4 и я буду безмерно благодарен...
В принципе и троллевой доки вполне хватает: но иногда есть вопросы, которые там не совсем доступно описаны (для меня)...
Про макрос - точно: совсем из виду упустил, спасибо.
Но вот что получается при его добавлении:
Код:
release\main.o(.text+0x1e2):main.cpp: undefined reference to `vtable for Ui_PostScan'
release\main.o(.text+0x1e9):main.cpp: undefined reference to `vtable for Ui_PostScan'
release\main.o(.text+0x2c3):main.cpp: undefined reference to `vtable for Ui_PostScan'
release\main.o(.text+0x2cf):main.cpp: undefined reference to `vtable for Ui_PostScan'
release\postscan.o(.text+0x69):postscan.cpp: undefined reference to `vtable for Ui_PostScan'
release\postscan.o(.text+0x70):postscan.cpp: more undefined references to `vtable for Ui_PostScan' follow

В какую сторону теперь смотреть?
Записан
SLiDER
Гость
« Ответ #3 : Ноябрь 27, 2005, 00:49 »

Цитата: "Dmitry_Panoff"
В какую сторону теперь смотреть?

Не знаю используете ли вы для компиляции какую-нибудь ide, но попробуйте удалить из директории проекта все автоматически сгенерированные файлы и проделать с нуля следующую процедуру: qmake -project, qmake xxx.pro, mingw32-make. Сдается мне, у вас чего то в makefile нехватает.
Записан
Dmitry_Panoff
Гость
« Ответ #4 : Ноябрь 27, 2005, 01:09 »

Цитата: "SLiDER"
Цитата: "Dmitry_Panoff"
В какую сторону теперь смотреть?

... проделать с нуля следующую процедуру: qmake -project, qmake xxx.pro, mingw32-make. Сдается мне, у вас чего то в makefile нехватает.

Да, спасибо, уже сам нашел в чем проблема была. В доке нарыл следующее:
Цитировать
... if you get compiler errors along the lines of "undefined reference to vtable for LcdNumber", you have probably forgotten to run the moc or to include the moc output in the link command.

Перегенерил проект по новой и все заработало.
Благодарю за помощь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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