好的,所以标题可能会低估,我会在这里解释一下。我有一个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文件:
<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;
答案 0 :(得分:0)
据我所知:你有一个外循环(计数var i
)和一个内循环(计数var j
),你用它来比较两个列表。对于外循环中的每个项目(i
),您可以搜索内循环中的每个项目(j
)。所以在以下一行
if(items[j]->text() == list1[j])
我假设您打算进行以下比较:
if(items[j]->text() == list1[i])