Добрый день ! Я еще только учусь Qt, пишу программу, которая читает файл с запятыми в качестве разделителей и помещает это все в таблицу. Принцип действия(можете посоветовать более оптимальный):
1. Открываю файл, считываю в строку content.
2. Разбиваю строку в StringList(команда QString::split), в качестве символа разбивки выбираю "\n". Теперь я имею массив из строк.
3. Далее получаю таким же образом массив из полей, символ разбивки - это запятая. Получаю массив из полей.
4. Далее избавляюсь от кавычек в каждом поле, использую QStringList::replaceInStrings("\"","\0");
5. Затем заношу так данные, используя цикл:
tmp = slFields.at(j); // берем поле по счету j, tmp это QString
QTableWidgetItem *item = new QTableWidgetItem(tmp); // создаю item
table->setItem(i, j, item); // заношу в таблицу i-строка, j-столбец. Перебираю строки, проходя по каждому элементу строки
Сделал CheckBox, по которому должны удаляться пустые столбцы, вот функция:
void CsvCon::on_delEmptyColsCheckBox_clicked()
{
if (!content.isEmpty()) { // смотрю, если мы открывали файл то строка не пуста, поэтому продолжаем
if (ui->delEmptyColsCheckBox->isChecked()) {
delEmptyCols(ui->csvTable); // если флажек выбран, передаем управление функции, которая должна удалить
} else { // пустые столбцы
csvLoad(content, ui->csvTable); // если флажек не выбран, передаю функции строку и таблицу,
} // заносит все заново, как при открытии файла
}
}
void CsvCon::delEmptyCols(QTableWidget *table) // а это функция для удаления
{
bool del = true; // по умолчанию столбец надо удалить
for (int i = 0; i < (table->columnCount()); i++) { // прохожу по столбцам
for (int j = 0; j < (table->rowCount()); j++) { // цикл прохода по строкам
if (!(table->item(j, i)->text()).isEmpty()) // если хотя бы одна строка не пуста,
del = false; // то збрасываем признак удаления
}
if (del == true) table->removeColumn(i); // вконце цикла столбцов смотрим признак удаления, удаляем столбец
del = true; // возвращаем признак удаления и переходим к следующему столбцу
}
}
На деле же выходит так: часть столбцов удалилась, часть нет. Если например взять 4 пустых столбцов, идущих друг за другом то удалятся 1 и 3.
Помогите пожалуйста, с утра ничего не получается.