Виджет Qt на основе QWidget

Я пытаюсь создать свой собственный виджет на основе 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.cpp:

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

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

  • ошибка: неопределенная ссылка на `vtable for Square'

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

Спасибо.


person 0xAX    schedule 19.10.2010    source источник
comment
Вероятно, это опечатка, но имя вашего параметра — fl, а имя, которое вы передаете конструктору QWidget, — f.   -  person Steve S    schedule 19.10.2010
comment
Перезапустите qmake и посмотрите, исчезла ли ошибка vtable.   -  person Steve S    schedule 19.10.2010
comment
См. stackoverflow.com /вопросы/2555816/   -  person Steve S    schedule 19.10.2010


Ответы (1)


Если вы используете 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).

person Steve S    schedule 19.10.2010