从listWidget中选择并添加到textedit

时间:2016-03-03 06:34:06

标签: c++ xml qt parsing

好的,所以标题可能会低估,我会在这里解释一下。我有一个ListWidget和一个TextEdit。所以我先读了一个xml文件(这个xml文件有其他配置文件的路径)。我将从XML文件中获取的所有路径存储在如下结构中:

标题

struct triStringList
    {
        QString Filename;
        QString block;
        QString flag;
        QString aktioncommand;
    };
    QList<triStringList> allTriList;
    QList <QListWidgetItem*> items;

CPP

void MainWindow::presetXML()
{
    triStringList triStr;
    QXmlGet xmlget;
    xmlget.load(File.xml);
    xmlget.findAndDescend("HEADER");
    while(xmlget.findNext("HEADER_FILES"))
    {
        triStr.Filename.append(xmlget.getAttributeString("Name"));
        triStr.block.append(xmlget.getAttributeString("BlockNr"));
        triStr.flag.append(xmlget.getAttributeString("FLags"));
        xmlget.descend();
        if(xmlget.findNext("AKTION_COMMAND"))
        {
            triStr.aktioncommand  =xmlget.getAttributeString("Name");
        }
        allTriList.append(triStr);
        xmlget.rise
    }
    for(int i=0; i<allTriList.count(); i++)
    {
        Qstring name;
        QFileInfo file(allTriList[i].Filename);
        name = file.fileName();
        preset_tri_list.append(name);
    }
    ui->listWidgetOutput->addItems(preset_tri_list);

好的,我将fileName添加到listwidget,就像我上面所示,所有子节点都没有&#34; Action命令&#34; subchild。我有一个函数,在我所谈到的TextEdit上显示这个Action命令,当在listwidgetoutput中单击该文件时: -1我拿了Selected项目 然后我修剪结构中所有文件的fileName。 - 我将它与所选项目进行比较 - 如果匹配,我将相应的动作命令添加到文本编辑。

void MainWindow::on_listWidgetOutput_itemSelectionChanged()
{
    QString list;        
    QStringList list1;
    items = ui->listWidgetOutput_TRI->selectedItems();
    qDebug()<<"num: "<<items.count();
    qDebug()<< "all: "<<allTriList.count();
    for(int i=0; i<allTriList.count();i++)
    {
       QFile file(allTriList[i].Filename);
        list = file.fileName();
       list1.append(list);          

       for(int j=0; j<items.count(); j++)
       {              
           if(items[j]->text() == list1[j])
           {
               ui->TextEdit->setText(allTriList[i].aktioncommand);
           }
       }
    }
}

但是当我点击我得到的文件时:

ASSERT failure in QList<T>::operator[]: "index out of range", file C:\app\Tools\Qt\5.4\msvc2010_opengl\include\QtCore/qlist.h, line 486

程序崩溃,从调试我发现它崩溃在这里:for(int j=0; j<items.count(); j++)但它不是空的。 不完全确定发生了什么,我是Qt初学者。很抱歉很长的帖子

xml文件:

&#13;
&#13;
 <Header>
    <TRIGGER Name="%PATH%/file" FLags="C24" BlockNr="C_Blocknr_1"/>
    <TRIGGER Name="%%PATH%/file" FLags="C25" BlockNr="C_Blocknr_2"/>
    <TRIGGER Name="%PATH%/file" FLags="C74" BlockNr="C_Blocknr_6"/>
    <TRIGGER Name="%PATH%/file" FLags="C94" BlockNr="C_Blocknr_1"/>
    <TRIGGER Name="%%PATH%/file" FLags="C20" BlockNr="C_Blocknr_1"/>
    <TRIGGER Name="%%PATH%/file" FLags="C21" BlockNr="C_Blocknr_1"/>
    <TRIGGER Name="%%PATH%/file" FLags="C49" BlockNr="C_Blocknr_1"/>
 </Header>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

据我所知:你有一个外循环(计数var i)和一个内循环(计数var j),你用它来比较两个列表。对于外循环中的每个项目(i),您可以搜索内循环中的每个项目(j)。所以在以下一行

if(items[j]->text() == list1[j])

我假设您打算进行以下比较:

if(items[j]->text() == list1[i])