4

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 に基づくクラスのコンストラクターを宣言するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

9

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 )。

于 2010-10-19T15:02:45.657 に答える