将C#代码转换为QT C++

3

我希望使用C#中的COM webbrowser控件编写一个程序。以下是我编写的代码:

myEles = webBrowser1.Document.All;
foreach (HtmlElement myEle in myEles)
    {
        if (myEle.TagName == myTag)
        {
            if (i == myIndex)
            {
                return myEle;
            }
            i++;
        }
    }

我希望将它转换成QT。我注意到Qaxobject是必不可少的。但是当枚举myEles中的元素时,我仍然卡住了,在QT中尝试的代码如下:

int i = 0;
QAxObject*  myEles = ui.MyWebView->querySubObject("Document");
myEles = myEles->querySubObject("All");
QAxObject* myEle;
int myCnt = myEles->dynamicCall("Count").toInt();

for (int j = 0;j < myCnt;j++)
{
    myEle = myEles->querySubObject("[int]", j);
    if(myEle->property("TagName") ==myTag)
    {
        if (i == myIndex)
        {
            myEle->dynamicCall("InvokeMember(const QString&)", "click");
            return myEle;
        }
        i++;
    }
}

在这种情况下,我甚至无法获得正确的myCnt。我不知道该如何正确写入它。

我已经尝试了qt foreach,但仍然没有解决问题。

1个回答

0

可能没有可以调用的“count”公共插槽。请使用myEles->generateDocumentation();检查文档。

要遍历所有属性,请使用函数propertyBag()。您将获得包含所有属性的QMap:

QAxObject* myEles = ui.axWidget->querySubObject("Document");
myEles = myEles->querySubObject("All");
QMap<QString, QVariant> map = myEles->propertyBag();
int myCnt = map.size();
for (int j = 0;j < myCnt;j++)
{
   ...
}

谢谢您的回答,但是您提供的代码由于某些语法错误无法通过;问题出在这里:“QMap<QString,QVariant> map = myEles->propertyBag();”。 - Dong Robbin
确切的错误信息是什么?我已经成功尝试过了。你是否包含了 <QMap> 库? - snucker
QAxObject* myWebBrowser_QT::myEleGet(QString myTag, int myIndex) { QAxObject myEle; QAxObject myEles = ui.MyWebView->querySubObject("Document"); myEles = myEles->querySubObject("All"); QMap<QString, QVariant> map = myEles->propertyBag(); int myCnt = map.size(); for (int j = 0;j < myCnt;j++) { int xxx = 0; } return myEle; } 以上是整个函数。当我按下按钮加载此函数时,会弹出一个窗口,显示:“模块:5.6.0 文件:global\qglobal.cpp 行:2994 ASSERT:“id<0”在文件qaxbase.cpp中”。 - Dong Robbin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接