• 7520阅读
  • 16回复

QVariant [复制链接]

上一主题 下一主题
离线向西流
 
只看楼主 倒序阅读 楼主  发表于: 2013-05-23
VARIANT EventInHto;//定义EventInH一500为VARIANT结构体类型
EventInHo.vt=VT-R4;//将EventIn的vt成员变量定义为浮点类型
EventInHo.fltVal=0.0;//根据需要设置EventInH A500的值
EonCtrl.SendEvent("InEventH-A500",&EventInHo);
上头是VC代码
在qt中使用QVariant ,是将哪个成员变量定义为浮点类型,哪个函数可以设值它的值
QVariant EventInHto;
...
离线ppdayz

只看该作者 1楼 发表于: 2013-05-23
回 楼主(向西流) 的帖子
http://qt-project.org/doc/qt-4.8/qvariant.html
去看看帮助,就有答案了
离线向西流
只看该作者 2楼 发表于: 2013-05-23
回 1楼(ppdayz) 的帖子
就是看了不懂啊,自己C语言学的不是很好,但现在又要急用qt
离线ppdayz

只看该作者 3楼 发表于: 2013-05-23
回 2楼(向西流) 的帖子
这没办法,要用qt,C++一定要扎实,这个是最基本的
QVariant EventInHto(1.709);
直接构建就可以了,这时候EventInHto就是一个存储浮点型的QVariant
帮助里的例子不是很多么?
  1. QDataStream out(...);
  2. QVariant v(123);                // The variant now contains an int
  3. int x = v.toInt();              // x = 123
  4. out << v;                       // Writes a type tag and an int to out
  5. v = QVariant("hello");          // The variant now contains a QByteArray
  6. v = QVariant(tr("hello"));      // The variant now contains a QString
  7. int y = v.toInt();              // y = 0 since v cannot be converted to an int
  8. QString s = v.toString();       // s = tr("hello")  (see QObject::tr())
  9. out << v;                       // Writes a type tag and a QString to out
  10. ...
  11. QDataStream in(...);            // (opening the previously written stream)
  12. in >> v;                        // Reads an Int variant
  13. int z = v.toInt();              // z = 123
  14. qDebug("Type is %s",            // prints "Type is int"
  15.          v.typeName());
  16. v = v.toInt() + 100;            // The variant now hold the value 223
  17. v = QVariant(QStringList());
注释也都很详尽
离线dbzhang800

只看该作者 4楼 发表于: 2013-05-23
回 楼主(向西流) 的帖子
如果你纠结于Qt的 QVariant  和 Windows系统的 VARIANT

那么可以去看看ActiveQt的源码(一共也没几个文件)

比如,你可以打开 qaxtypes.cpp 文件去看

QVariant VARIANTToQVariant(const VARIANT &arg, const QByteArray &typeName, uint type);
bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out);

等等
离线dbzhang800

只看该作者 5楼 发表于: 2013-05-23
Re:回 1楼(ppdayz) 的帖子
引用第2楼向西流于2013-05-23 09:39发表的 回 1楼(ppdayz) 的帖子 :
就是看了不懂啊,自己C语言学的不是很好,但现在又要急用qt

其实,在Qt中使用ActiveX,C和Qt的基础都是次要的,重要的是COM编程基础。


离线向西流
只看该作者 6楼 发表于: 2013-05-23
回 3楼(ppdayz) 的帖子
  QVariant params(true);
    axWidgetEon->dynamicCall("SendEvent(LeftView, QVariant&)",params);
我这么写,运行程序却这样提示
QAxBase: Error calling IDispatch member SendEvent: Bad parameter count
离线向西流
只看该作者 7楼 发表于: 2013-05-23
回 4楼(dbzhang800) 的帖子
版主能否帮帮忙,帮忙找到下头qt对应的代码
bool bvalue=TRUE;
VARIANT BoolIn;
BoolIn.vt=VT_BOOL;
BoolIn.boolVal=bvalue;
EonCtrl.SendEvent("InEventH",&BoolIn );
看了很久,实在是乱的看不懂
离线dbzhang800

只看该作者 8楼 发表于: 2013-05-23
Re:回 4楼(dbzhang800) 的帖子
引用第7楼向西流于2013-05-23 10:21发表的 回 4楼(dbzhang800) 的帖子 :
版主能否帮帮忙,帮忙找到下头qt对应的代码
bool bvalue=TRUE;
VARIANT BoolIn;
BoolIn.vt=VT_BOOL;
BoolIn.boolVal=bvalue
.......

Qt中没有这些东西,你需要查MSDN
离线XChinux

只看该作者 9楼 发表于: 2013-05-23
Re:回 4楼(dbzhang800) 的帖子
引用第7楼向西流于2013-05-23 10:21发表的 回 4楼(dbzhang800) 的帖子 :
版主能否帮帮忙,帮忙找到下头qt对应的代码
bool bvalue=TRUE;
VARIANT BoolIn;
BoolIn.vt=VT_BOOL;
BoolIn.boolVal=bvalue;
.......

  不着道啊

二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 10楼 发表于: 2013-05-23
Re:回 3楼(ppdayz) 的帖子
引用第6楼向西流于2013-05-23 10:15发表的 回 3楼(ppdayz) 的帖子 :
  QVariant params(true);
    axWidgetEon->dynamicCall("SendEvent(LeftView, QVariant&)",params);
我这么写,运行程序却这样提示
QAxBase: Error calling IDispatch member SendEvent: Bad parameter count


不是告诉你了么?参数不匹配,SendEvent有两个参数,你只传进去一个.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线向西流
只看该作者 11楼 发表于: 2013-05-23
回 10楼(XChinux) 的帖子
是啊,一个参数,就是另一个参数不知道是什么,难道是数据类型bool,这么写??
QVariant params(bool,true);???验证一下,也不行,不知道该如何搞了
离线XChinux

只看该作者 12楼 发表于: 2013-05-23
无语了,第一个参数是SendEvent的第一个参数是,LeftView类型,  它是什么?你传过去,比如:

   axWidgetEon->dynamicCall("SendEvent(LeftView, QVariant&)",  myLeftView, params);
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线向西流
只看该作者 13楼 发表于: 2013-05-23
回 12楼(XChinux) 的帖子
应该不是这个应该吧,LeftView是eon对应的接口
在vc是这么写的    
bool bvalue=TRUE;
VARIANT BoolIn;
BoolIn.vt=VT_BOOL;
BoolIn.boolVal=bvalue;
EonCtrl.SendEvent("LeftView",&BoolIn )


但在qt,需要用到这样的格式
QVariantList params = ...
object->dynamicCall("SendEvent(QString, QVariant&)", params);</pre>
离线向西流
只看该作者 14楼 发表于: 2013-05-23
回 12楼(XChinux) 的帖子
难道是这么写
axWidgetEon->dynamicCall("SendEvent(QString, QVariant&)",  LeftView, params);?
离线XChinux

只看该作者 15楼 发表于: 2013-05-23
看帮助吧.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线向西流
只看该作者 16楼 发表于: 2013-05-26
回 4楼(dbzhang800) 的帖子
必须再次求助,实在是不懂,我查了文件
QVariant VARIANTToQVariant(const VARIANT &arg, const QByteArray &typeName, uint type)
{
    QVariant var;
    switch(arg.vt) {
    case VT_BSTR:
        var = QString::fromWCharArray(arg.bstrVal);
        break;
    case VT_BSTR|VT_BYREF:
        var = QString::fromWCharArray(*arg.pbstrVal);
        break;
    case VT_BOOL:
        var = QVariant((bool)arg.boolVal);
        break;



查了bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out)

case QVariant::Bool:
        if (out && arg.vt == (VT_BOOL|VT_BYREF)) {
            *arg.pboolVal = qvar.toBool() ? VARIANT_TRUE : VARIANT_FALSE;
        } else {
            arg.vt = VT_BOOL;
            arg.boolVal = qvar.toBool() ? VARIANT_TRUE : VARIANT_FALSE;
            if (out) {
                arg.pboolVal = new short(arg.boolVal);
                arg.vt |= VT_BYREF;
            }
        }
        break;

试了将vc代码
bool bvalue=TRUE;
VARIANT BoolIn;
BoolIn.vt=VT_BOOL;
BoolIn.boolVal=bvalue
改为
QVariant params = QVariant((bool)true);
出错QAxBase: Error calling IDispatch member SendEvent: Bad parameter count
不知道究竟是如何改才能对应上,或者是可以怎么弄直接在qt上使用VARIANT
快速回复
限100 字节
 
上一个 下一个