2012-04-02 12 views
3

Я ученик-программист, использующий QT для разработки и применения для работы. В настоящее время я разрабатываю функции сохранения, в которых данные берутся из таблицы и сохраняются в файле. У меня возникают проблемы, когда я пытаюсь записать данные в столбцы. Не путать никого; моя проблема заключается в форматировании текста WHEN SAVING из таблицы данных; не читая его. Таким образом, в настоящее время, когда данные сохраняются из моей таблицы она сохраняется в файл и выглядит следующим образом:Использование iomanip для форматирования вывода данных в текстовый файл с 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, вероятно, есть что-то, что поможет мне выполнить то, что мне нужно здесь (намного проще). Я просто не могу показаться, чтобы найти эту функцию после того, как refencing QString documentation, QStringList Doucmentation, и больше всего QTextStream Documentation.

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

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 Documentation., но я не могу заставить его работать правильно. Пробовал:

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

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

+0

действительно; предположим, что я мог бы использовать свой поток Text во внутреннем цикле для достижения желаемого эффекта (то есть, как только setFieldWidth работает правильно). –

+0

Каков тип 'strList'? –

+1

комбинация методов QString, таких как 'leftJustified()' и 'rightJustified()' может вам тоже помочь – unexplored

ответ

2

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"; 
} 
+0

. Вы должны указать пример на _how_, чтобы установить ширину. Я бы предложил «данные << setw (?) << ui-> tableWidg ...'. – Chad

+0

обновлен за комментарий Чада одним способом сделать это. Не сказать, что это лучший способ, каким-то образом, только первым, кто пришел на ум. – AJG85