QTextStream используется для вывода на консоль - PullRequest
2 голосов
/ 02 декабря 2010

Эй, я столкнулся с этой действительно раздражающей проблемой с QTextStream, используемым для вывода на консоль.

QTextStream cout(stdout, QIODevice::WriteOnly);
cout.setRealNumberPrecision(1);
cout.setPadChar('.');

//  some code generating values of f[i] [...]

for (int i = 10; i >= 0; i--)
{
    if (f[i] < -0.04 || f[i] > 0.04 || 1)
    {
       cout.setRealNumberNotation(QTextStream::FixedNotation);
       cout.setFieldAlignment(QTextStream::AlignRight);
       cout.setFieldWidth(8);
       cout << f[i];
       cout.setFieldAlignment(QTextStream::AlignLeft);
       cout.setFieldWidth(3);
       cout << "*x^";
       cout.setFieldAlignment(QTextStream::AlignLeft);
       cout.setNumberFlags(cout.numberFlags() & ~QTextStream::ForceSign);
       cout << i << endl;
    }
}

Результаты выглядят так: найден полином:

.....0.0*x^10.
......-0.0*x^9..
.......0.0*x^8..
......-0.0*x^7..
.......0.0*x^6..
.......1.0*x^5..
.....-36.0*x^4..
.....397.0*x^3..
...-1674.0*x^2..
....2753.0*x^1..
...-1440.0*x^0..
..

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

Спасибо за помощь.

1 Ответ

2 голосов
/ 03 декабря 2010

Если бы я догадался, я бы сказал, что endl выравнивается по левому краю и дополняется до 3 символов, при этом после возврата возвращаются два дополнительных символа, которые отображаются в начале следующей строки.Ни на одной строке, и совсем не на последней.Попробуйте установить ширину поля обратно в 1, прежде чем выводить endl.

...