【发布时间】:2016-11-16 08:25:56
【问题描述】:
我有一个基类 Base,它提供了一系列加载函数,从文件中读取保存的设置。例如
void Base::load(QWidget *w);
virtual void Base::load(QTableWidget *t); // note this is declared virtual
void Base::load(QLineEdit *le);
Base::load(QWidget *w) 通常由高级小部件上的子类调用。该例程将找到输入小部件的子小部件(按类型),并在这些小部件上调用适当的加载例程。重载按预期工作。 所以在一个子类 OkSubClass 中,我通常会做这样的加载:
void OkSubClass::load(void)
{
load(myMainWidget);
load(myOtherHighLevelWidget);
}
一切都很好 - 任何一个小部件的子部件都会被加载。
现在我有一个 Base 的子类,它需要为表加载内容略有不同。它声明了
virtual void ProblemSubClass::load(QTableWidget *t) ;
我还有一些被这个类使用的小部件,它们继承了一个表单类;例如
class myWidget: public QWidget, public MyForm { ... };
并且 ProblemSubClass 有一个成员变量
myWidget *_myMainWidget;
现在在例程 ProblemSubClass::load(void) 中,我尝试执行以下操作:
ProblemSubClass::load(void)
{
load(_myMainWidget);
}
它抱怨它无法将 _myMainWidget 转换为 QTableWidget 。这让我很惊讶,因为我认为 ProblemSubClass 应该能够看到 load(QWidget) 成员函数。 如果我直接调用基类函数,它就可以工作。
ProblemSubClass::load(void)
{
Base::load(_myMainWidget);
}
但我不明白为什么我不这样做。请赐教!
【问题讨论】:
-
不要用文字描述你的代码,而是用 code 来描述。如果您花一些时间创建Minimal, Complete, and Verifiable Example,就会更容易理解发生了什么。
标签: c++ qt inheritance