QTableWidget для нескольких файлов - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть QTableWidget с такими данными: table.png Таблица может содержать только имена из QList:

QList<QString> shapes {  "Triangle", "Circle", "Trapeze", "Square", "Rectangle", "Diamond" };

со случайными значениями int в соседней ячейке.

Таблица может содержать все «фигуры» или только ее часть (как в примере).

Я пытаюсь создать отдельный файл для каждой фигуры из таблицы и записать соответствующие значения intим.Чтобы добиться этого, я написал что-то вроде этого:

QList<QTableWidgetItem *> ItemList 
/.../
for(int i = 0; i < rows; ++i)
{
    for(int i = 0; i<columns; ++i)
    {
        foreach(QString itm, shapes )
        {
            ItemList = ui->tableWidget->findItems(itm, Qt::MatchExactly); 
            QFile mFile(itm + ".txt");

            if(mFile.open(QFile::ReadWrite))
            {
                for(int i = 0; i < ItemList.count(); ++i)
                {
                    int rowNR = ItemList.at(i)->row();
                    int columnNR = ItemList.at(i)->column();
                    out << "Values = " << ui->tableWidget->item(rowNR, columnNR+1)->text() << endl;
                }
            }   
        }
            mFile.flush();
            mFile.close();
    }
}

Файлы создаются для каждого элемента из QList - если фигуры из QList нет в таблице, создается пустой файл.

Как создавать файлы только на основе доступных имен в таблице?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете написать так.

QList<QTableWidgetItem *> ItemList 
/.../

for(QString str : Shapes){
    ItemList = ui->tableWidget->findItems(itm, Qt::MatchExactly); // Get the matching list

    if(ItemList.isEmpty(){
        continue; // If shape does not exist in table skip the iteration
    }

    QFile mFile(str + ".txt");
    if(!mFile.open(QFile::ReadWrite){
        return; // This should not happen ; this is error
    }

    for(QTableWidgetItem *item : ItemList){
        int row = item->row(); 
        int col = item->column()+1; // since it is neighboring cell
        QString Value = ui->tableWidget->item(row,col)->text();
        mFile.write(Value.toUtf8()); // You can change the way in which values are written
    }

    mFile.flush();
    mFile.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...