为什么我不能调用继承版本的 QWidget::isVisible()?
Why can't I call an inherited version of QWidget::isVisible()?
我有一个子类MyDialog
子类QDialog
,它本身子类QWidget
。 所以它看起来像这样:
QObject
|
V
QWidget
|
V
QDialog
|
V
MyDialog
类 MyDialog
具有静态方法static bool isVisible( MyObject *myObject )
。 它还从其父级继承实例方法:QWidget::isVisible()
在MyDialog.h中:
class MyDialog : public QDialog
{
static bool isVisible( MyObject *myObject );
MyDialog *getInstance( MyObject *myObject );
// other methods
};
在 MyDialog.cpp:
bool MyDialog::isVisible( MyObject *myObject )
{
// This intended call to QWidget::isVisible() won't compile
return MyDialog::getInstance( myObject )->isVisible()
}
这无法编译,并显示以下错误:
src/MyDialog.cxx: In static member function ‘static bool MyDialog::isVisible(MyObject*)’:
src/MyDialog.cxx:67:57: error: no matching function for call to ‘MyDialog::isVisible()’
src/MyDialog.cxx:67:57: note: candidate is:
src/MyDialog.cxx:62:6: note: static bool MyDialog::isVisible(Equipment*)
src/MyDialog.cxx:62:6: note: candidate expects 1 argument, 0 provided
它似乎试图调用我的静态方法MyDialog::isVisible( MyObject * )
而不是与签名匹配的继承QWidget::isVisible()
。 为什么?
当您声明静态函数isVisible
与基类的函数同名但签名不同时,您不会重载它,但实际上隐藏了继承的函数。编译器看到的是类中实现的函数,但看不到从 QWidget 继承的isVisible
函数。
如果你想专门调用QWidget版本,要么更改函数的名称(这样它就不会再隐藏它了(,要么像这样限定调用:
MyDialog::getInstance( myObject )->QWidget::isVisible();
相关文章:
- 如何在QT Creator上将QWidget声明为继承类的对象
- QWidget::p aintEngine:不应再在 QTreeWidget 派生类中调用
- 将一个 QWidget 链接到另一个新创建的 QWidget
- 为什么 isVisible 在 QWidget 孩子中不起作用
- 如何声明全局QWidget?
- QWidget UI 在使用 QQuickWidget 时冻结
- "(QWidget* pobj=0)"和"(QWidget* pwgt/*=0/)&quo
- qt QWidget::closeEvent link issue
- 如何在QMdiSubWindow关闭后删除QWidget
- 如何在QGraphicsView中移动QWidget?
- QPainter的QWidget滚动条
- 在类中创建 QWidget
- 在另一个小部件中更改QWidget的背景颜色
- 使用 QMediaPlayer 时出现"QWidget::paintEngine: Should no longer be called"
- QWidget收听其他QWidgets事件
- 为提升的小部件设置父 QWidget
- 如何制作可以缩放和绘制的画布QWidget?
- 在 QWidget 中的 QGraphicsScene 中绘制
- 如何将不在 QT 全局范围内的函数附加到 Qwidget 上
- 为什么我不能调用继承版本的 QWidget::isVisible()?