Использование iomanip для форматирования вывода данных в текстовый файл с помощью Qt - PullRequest
3 голосов
/ 03 апреля 2012

Я студент-программист, использующий QT для разработки и применения для работы. В настоящее время я разрабатываю функции сохранения, в которых данные берутся из таблицы и сохраняются в файл. У меня возникают некоторые проблемы, когда я пытаюсь записать данные в столбцы. Никого не путать; моя проблема - форматирование текста при сохранении из таблицы данных; не читая в это. Поэтому в настоящее время, когда данные сохраняются из моей таблицы, они сохраняются в файл и выглядят так:

0 0.048 300 101325 0 0
10 0.048 300 101325 0 0

Мне нужно, чтобы это выглядело так

0  0.048 300 101325 0 0
10 0.048 300 101325 0 0

Во время исследования я натолкнулся на setw из библиотеки iomanip на c ++, которая устанавливает минимальное количество символов для заполнения данных, а затем использует остальное для заполнения. Звучит идеально, верно? Проблема в том, что я не могу заставить его работать ни с чем, кроме cout; это не то, что мне нужно. Мне нужно, чтобы он в основном добавлял пробелы в мою строку до того, как ее выписать.

Я также чувствую, что Qt, вероятно, должно что-то помочь мне выполнить то, что мне нужно здесь (намного проще). Кажется, я просто не могу найти эту функцию после восстановления документации QString , QStringList Doucmentation и больше всего Документация QTextStream.

В настоящее время моя функция сохранения выглядит следующим образом:

QTextStream data(&saveFileAsscf);
QStringList tmpList;
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++)
                {
                    strList.clear();
                    for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++)
                    {
                        strList << ui->tableWidgetReaderTable->item(x,a)->text();
                    }
                    data <<strList.join(" ") << "\n";
                }

Я так уверен, что setFieldWidth - мой ответ из Документации QTextStream. , но я не могу заставить его работать правильно. Пробовал:

data.setFieldWidth(13) << strList.join(" ") << "\n";

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

1 Ответ

2 голосов
/ 03 апреля 2012

std::fstream является одним из вариантов, если вы хотите использовать STL. Однако, если вы рассматриваете весь список строк как поле, ширина которого намного больше 13, к примеру, вы можете попробовать setFieldWidth(23), но это, вероятно, дополнит конец. Если вместо этого вы рассматриваете каждое значение как поле, оно становится легче.

Пример того, что я имею в виду, рассматривая каждое значение как поле:

QTextStream data(&saveFileAsscf);
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++)
{
   data.setPadChar(' ');
   for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++)
   {
      QString value = ui->tableWidgetReaderTable->item(x,a)->text();
      data.setFieldWidth(qMax(2, value.length()));
      data << value;
      data.setFieldWidth(1);
      data << " ";
   }
   data << "\n";
}
...