既然你需要在到底什么是QList<AnyClass*>
,你可以尝试这样的事情(假设AnyClass
从QObject
派生)
注:我做了一些修改原密码被通过你的列表因为返回一个巨大的列表可能不是很有效。我没编译代码,但希望你能弄清楚这是什么片段
void DbManager::listVO(QString voname, QList<AnyClass*>& listAnyClass)
{
DbManager::VOPropertiesJoin(DbManager::VOKeys(obj),VOJOIN_BOTH,"=");
// Initialise list with an empty list
listAnyClass = QList<AnyClass*>();
QString voquery = "select * from %1";
voquery = voquery.arg(voname);
QSqlQueryModel *volist = DbManager::makeSelect(voquery);
for(int i = 0; i < volist->rowCount(); i++)
{
QObject *voinstance = GetInstance(voname, volist->record(i));
// Trying to cast into an AnyClass
AnyClass* pAnyClass = qobject_cast<AnyClass*>(voinstance);
// If pAnyClass is a valid AnyClass* update your list
if(pAnyClass)
{
listAnyClass.append(pAnyClass);
}
}
}
QObject* DbManager::GetInstance(QString sVoname, const QSqlRecord& record)
{
return DbManager::instantiateVO
(
voname,
record.value(0),
record.value(1),
record.value(2),
record.value(3),
record.value(4),
record.value(5),
record.value(6),
record.value(7)
)
}
内发生的事情,并呼吁DbManager::listVO(QString voname, QList<AnyClass*>& listAnyClass)
功能后,listAnyClass
将得到相应的填充。与返回列表相比,这是有效的。
编辑:
所以,概括地说,你想转换成QList<QObject*>
QList<AnyClass*>
。因此,保持你原来的代码,因为它是和实施这样的,你想 做这种转换的方法:
void ConvertToAnyClassList(const QList<QObject*>& listQObjects, QList<AnyClass*>& listAnyClass)
{
listAnyClass = QList<AnyClass*>();
for(int i = 0; i < listQObjects.length(); ++i)
{
AnyClass* pAnyClass = qobject_cast<AnyClass*>(listQObjects.at(i));
if(pAnyClass)
{
listAnyClass.append(pAnyClass)
}
}
}
你可以这样调用:
QList<QObject*> listQObjects = DbManager::listVO("AnyClass");
QList<AnyClass*> listAnyClass;
ConvertToAnyClassList(listQObjects,listAnyClass);
假设你有多种类型,所以你可能想要实现这样的每个类型的功能:
ConvertToUserList(listQObjects,listUserObjects);
ConvertToCountryList(listQObjects,listCountryObjects);
谢谢,添加列表像函数的参数它的一个好主意,但这包括AnyClass类在这是我不想要的功能,因为我不想将DbManager与其他类绑定在一起,例如我想要此代码为用户列表,国家列表等等(为了实例化VO) ,所以我希望它是通用的(所以只适用于QObject)。 ¿所以我可以创建一个,例如,QList作为参数,然后用qObjects填充它? (知道每个qObjects已经是QObject的用户对象) –
2013-04-06 05:37:36
@DiegoFernandoMurilloValenci编辑答案 – warunanc 2013-04-06 06:29:47