2010-10-19 4 views
3

Я пытаюсь создать свой собственный виджет, основанный на QWidget. В конструкторе класса я есть:Qt виджет на основе QWidget

Square(QWidget *parent = 0, const char *name = 0, WFlags fl = 0); 

Square::Square(QWidget *parent = 0, const char *name = 0, WFlags fl) 
     : QWidget(parent, name, f) 
{ 
     if (!name) 
       setName("Game"); 
     reset(); 
     underMouse=false; 
} 

Но я вижу ошибку: 'WFlags' не был объявлен

Теперь я переделал свой код:

class Square : public QWidget 
{ 
    Q_OBJECT 

    public: 
     Square(QWidget *parent = 0); 
}; 

и в квадрате. каст:

Square::Square(QWidget *parent) 
     : QWidget(parent) 
{ 
} 

Но я вижу ошибку:

  • Ошибка: неопределенная ссылка на `виртуальные таблицы для Square»

  • ошибки: collect2: л.д. возвращается статус 1 выхода Что случилось? Как я могу объявить конструктор класса, основанного на QWidget?

спасибо.

+0

Это, вероятно, опечатка, но ваше имя параметра - 'fl', а имя, которое вы передаете конструктору QWidget, -' f'. –

+2

Повторно запустите qmake и проверьте, не исчезла ли ошибка vtable. –

+1

См. Http://stackoverflow.com/questions/2555816/qt-object-linker-problem-undefined-reverence-to-vtable –

ответ

8

Если вы используете Qt4, то компилятор абсолютно прав. WFlags не был объявлен. Это Qt::WindowFlags. Кроме того, вам не нужен name - это вещь Qt3.

См http://doc.qt.io/archives/4.6/qwidget.html#QWidget

Кстати, я никогда не беспокоить, чтобы позволить прохождение WindowFlags через мои конструкторы. Если вы посмотрите на стандартные виджеты Qt, они не будут (например, http://doc.qt.io/archives/4.6/qpushbutton.html#QPushButton).

Смежные вопросы