我有一个容器widget 是groupbox,里边放了一个输入控件combo box,现在是,comboBox需要使用父widget里边的函数来获取一个父类私有成员变量(我自定义的一个类)。
使用metaobject的标准过程如下:
QObject* parent = this->parent();
if(parent != NULL)
{
const QMetaObject* metaObj = parent->metaObject();
if(metaObj != NULL)
{
QString className(metaObj->className());
if(className.left(8) == "MYWidget")
{
myDataSource tmpDs;
if(metaObj->indexOfMethod("getDataSource()") != -1) //请注意,该处查询父类的函数,需要是public slots:的函数,而且在indexofMethod中使用完整的函数体。
{
QMetaObject::invokeMethod(parent, "getDataSource", Qt::DirectConnection, Q_RETURN_ARG(myDataSource, tmpDs) );
}
printf("\n\trow count is %d\n", tmpDs.rowCount());
}
}
问题是,invokeMethod貌似没有返回东西。是不是自定义的类型不支持,还得Q_DECLARE_METATYPE() 加qRegisterMetaType<>呢?