从列表小部件中选择并添加到文本编辑

Selecting from listWidget and adding to textedit

本文关键字:添加 文本编辑 选择 列表 小部      更新时间:2023-10-16

好的,所以标题可能很轻描淡写,我将在这里解释它。我有一个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上显示此操作命令:-1日我拿选定的项目-然后我修剪结构中所有文件的文件名。-与选定的项目比较-如果匹配,我将相应的操作命令添加到文本编辑中。

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:appToolsQt5.4msvc2010_openglincludeQtCore/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>

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

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

我假设你的意思是做以下比较:

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