Russian Qt Forum

Qt => Общие вопросы => Тема начата: usr00210 от Август 30, 2010, 14:55



Название: Не работает Q_OBJECT
Отправлено: usr00210 от Август 30, 2010, 14:55
При попытке скомпилировать такой класс:

Код:
class MyWidget : public QWidget
{
    Q_OBJECT
 public:
     explicit MyWidget(QWidget *parent = 0);
 private slots:
};

вылезает несколько ошибок типа: undefined reference to 'vtable for MyWidget'
То ли я что-то не понял, то ли не дочитал... Подскажите пожалуйста в чем ошибка?

Спасибо!


Название: Re: Не работает Q_OBJECT
Отправлено: BRE от Август 30, 2010, 14:59
Ты это делаешь в cpp файле? Так и должно быть.
Не отрабатывает moc для этого файла.
Либо делай объявления класса в .h, либо добавь в свой .cpp файл: #include "имя_файла_cpp.moc" и выполни qmake.


Название: Re: Не работает Q_OBJECT
Отправлено: usr00210 от Август 30, 2010, 15:04
Ты это делаешь в cpp файле? Так и должно быть.
Не отрабатывает moc для этого файла.
Либо делай объявления класса в .h, либо добавь в свой .cpp файл: #include "имя_файла_cpp.moc" и выполни qmake.


первое либо сработало! спасибо!


Название: Re: Не работает Q_OBJECT
Отправлено: SASA от Сентябрь 01, 2010, 15:59
А что такье explicit? В чём глубинный смысл его использованя?


Название: Re: Не работает Q_OBJECT
Отправлено: lit-uriy от Сентябрь 01, 2010, 16:16
SASA, креатор автоматом генерит такие заготовки


Название: Re: Не работает Q_OBJECT
Отправлено: pastor от Сентябрь 01, 2010, 16:27
А что такье explicit? В чём глубинный смысл его использованя?

Если конструктор имеет один параметр, то ключевое слово explicit запрещает автоматическое создание оператора преобразование типа (запрещает неявное преобразование).


Название: Re: Не работает Q_OBJECT
Отправлено: Igors от Сентябрь 01, 2010, 18:01
А что такье explicit? В чём глубинный смысл его использованя?

Код:
class MyWidget : public QWidget
{
  ...
public:
     MyWidget(QWidget *parent = 0);
};

QWidget * w = getWidget();  // есть какой-то виджет
..
MyWidget myW = w;  // так можно если нет explicit