【问题标题】:Qt widget based on QWidget基于 QWidget 的 Qt 小部件
【发布时间】:2010-10-19 14:59:45
【问题描述】:

我尝试基于 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 的类的构造函数?

谢谢。

【问题讨论】:

  • 这可能是一个错字,但你的参数名称是fl,你传递给QWidget构造函数的名称是f
  • 重新运行 qmake 看看 vtable 错误是否消失。

标签: c++ qt qwidget


【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多