【问题标题】:c# code transfers into QT C++c#代码转换成QT C++
【发布时间】:2016-09-14 12:46:28
【问题描述】:

我想使用 COM webbrowser 制作一个程序,它是 C# 中的一个控件。在 C# 中,我编写了以下代码:

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,但仍然......

【问题讨论】:

    标签: c# c++ qt com


    【解决方案1】:

    可能没有您可以调用的“计数”公共时段。请查看myEles-&gt;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 map = myEles->propertyBag();"
    • 确切的错误信息是什么?我尝试成功了。你有#include 吗?
    • QAxObject* myWebBrowser_QT::myEleGet(QString myTag, int myIndex) { QAxObject myEle; QAxObject myEles = ui.MyWebView->querySubObject("Document"); myEles = myEles->querySubObject("All"); QMap map = myEles->propertyBag(); int myCnt = map.size(); for (int j = 0;j
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 2013-01-06
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多