【发布时间】:2016-03-03 06:34:06
【问题描述】:
好吧,所以标题可能被低估了,我会在这里解释一下。我有一个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);
好的,我将文件名添加到上面显示的列表小部件中,所有子子项都不会有“动作命令”子项。当在 listwidgetoutput 中单击文件时,我有一个函数可以在我谈到的TextEdit 上显示此 Action 命令:
-1st 我选择了选定的项目
- 然后我修剪结构中所有文件的文件名。
-我将它与所选项目进行比较
- 如果匹配,我将相应的操作命令添加到文本编辑中。
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>
【问题讨论】:
-
list1的大小可以与items不同。检查一下。 -
你为什么在那里使用
QFile? -
我不知道为什么它不适合我。它显示 FLags = ""