• 7989阅读
  • 3回复

关于QMetaObject相关使用问题,请教 [复制链接]

上一主题 下一主题
离线foxyz
 

只看楼主 倒序阅读 楼主  发表于: 2009-03-05

我有一个容器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<>呢?
离线foxyz

只看该作者 1楼 发表于: 2009-03-06
问题已解决!!!.我把返回从类改成指针就OK了
离线iamnewsea
只看该作者 2楼 发表于: 2009-12-04
楼主给出答案,实在很可佳。顶一个。
离线80486

只看该作者 3楼 发表于: 2009-12-05
不过这种设计方式值得商榷
快速回复
限100 字节
 
上一个 下一个