C++ 获取安装的应用程序数据问题 struct-AppsData{ QList图标; QStringList名称; 英文版; QStringList出版社; QStringList安装位置; QStringList位置; }; 无效测试::setAppData(QList图标、QStringList名称、QStringList版本、QStringList发布者、QStringList安装位置、QStringList卸载位置) { AppsData AppsData; appsData.icons=图标; appsData.name=名称; appsData.version=版本; appsData.publisher=出版商; appsData.installLocation=安装位置; appsData.uninstallLocation=卸载位置; QVector

C++ 获取安装的应用程序数据问题 struct-AppsData{ QList图标; QStringList名称; 英文版; QStringList出版社; QStringList安装位置; QStringList位置; }; 无效测试::setAppData(QList图标、QStringList名称、QStringList版本、QStringList发布者、QStringList安装位置、QStringList卸载位置) { AppsData AppsData; appsData.icons=图标; appsData.name=名称; appsData.version=版本; appsData.publisher=出版商; appsData.installLocation=安装位置; appsData.uninstallLocation=卸载位置; QVector,c++,qt,windows-applications,qvector,C++,Qt,Windows Applications,Qvector,我还尝试在没有矢量的情况下实现它: struct AppsData { QList<QIcon> icons; QStringList name; QStringList version; QStringList publisher; QStringList installLocation; QStringList uninstallLocation; }; void Test::setAppData(QList<QIcon&g

我还尝试在没有矢量的情况下实现它:

struct AppsData {
    QList<QIcon> icons;
    QStringList name;
    QStringList version;
    QStringList publisher;
    QStringList installLocation;
    QStringList uninstallLocation;
};

void Test::setAppData(QList<QIcon> icons, QStringList names, QStringList versions, QStringList publishers, QStringList installLocations, QStringList uninstallLocations)
{
    AppsData appsData;
    appsData.icons = icons;
    appsData.name = names;
    appsData.version = versions;
    appsData.publisher = publishers;
    appsData.installLocation = installLocations;
    appsData.uninstallLocation = uninstallLocations;

    QVector<AppsData> dataVector;
    dataVector.push_back(appsData);
}
for(int i=0;isetText(0,names.at(i));
所有应用程序项->setText(1,versions.at(i));
所有应用程序项->setText(2,publisher.at(i));
所有应用程序项->setText(3,installLocations.at(i));
所有应用程序项->设置文本(4,卸载位置,位于(i));
}

但它不工作,应用程序崩溃。

假设您使用的是Qt5:

一旦创建了
QTreeWidget
和向量,就应该迭代它的元素,并为每个元素创建一个新的
QTreeWidgetItem
,这样您就可以得到如下结果:

for (int i = 0; i < uninstallLocations.count(); i++) {
        allApplicationsItem = new QTreeWidgetItem(allApplications);
        allApplicationsItem->setText(0, names.at(i));
        allApplicationsItem->setText(1, versions.at(i));
        allApplicationsItem->setText(2, publishers.at(i));
        allApplicationsItem->setText(3, installLocations.at(i));
        allApplicationsItem->setText(4, uninstallLocations.at(i));
    }
QTreeWidget*treeWidget=新的QTreeWidget(此);
treeWidget->setCoulmnCount(1);
对于(int i=0;isetText(0,vector.value(i));//0将其显示在第0列
}
如您所见,首先需要创建
QTreeWidget
,然后将每个子项添加为
QTreeWidgetItem


顺便说一下,你应该考虑将变量的名称<代码>矢量< /代码>改为更具体的。< /P>不要创建<代码> vector .CONTUTE()/代码>代码> qTreWistGeTime< <代码> s。那么如何在vector上迭代?@Cobra91151回答您的评论问题:您可以使用QVectorIterator()。对于原始问题,您能否指定什么是
parent
,以及
返回但不是全部(仅5个)是什么意思
?@lpares12主帖子已经更新。我的意思是12中只有5项。@Cobra91151,您想在列或行中显示向量值吗?但向量数据在0列中?这只是一个小测试示例。但是,我想从注册表中获取所有应用程序数据,并将数据写入
qtreewigetItem
QTreeWidget
),所以我决定使用
QVector
,因为我无法在正确的列中维护正确的数据。你能帮我吗?我已经更新了主帖子。我想在所有5列中使用vector显示主帖子中图像中的数据。谢谢。@Cobra91151我看不到图像。修改向量不会改变树显示。相反,你可以ld将所有
newItem
保存到
向量中,并直接修改它们,或者您可以执行
std::map
操作,每次修改字符串时,应用
qtreewigetitem::setText(字符串)
。图像链接-。我想显示应用程序数据,如图像中有矢量或没有矢量,但在适当的列中。5列1-名称(+图标)2-版本3-发布者4-安装位置5-卸载位置提前感谢。您应该关闭此问题,并在更新时提出另一个问题,因为与您现在提出的问题相比,您原来的问题发生了很大变化。
QTreeWidget *treeWidget = new QTreeWidget(this);
treeWidget->setCoulmnCount(1);

for(int i = 0; i < vector.count(); i++) {
    QTreeWidgetItem *newItem = new QTreeWidgetItem(treeWidget);
    newItem->setText(0, vector.value(i)); // 0 to display it at column 0
}