c++ - QTextStream格式问题

标签 c++ qt file-io format qtextstream

我正在尝试使用QTextStream来格式化数字输出。我已将我的问题简化为一个小测试程序来演示我的问题。以下是我的代码:

#include <QCoreApplication>
#include <QTextStream>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("testfile.txt");

    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);

        out.setFieldAlignment(QTextStream::AlignLeft);
        out.setFieldWidth(5);

        out << "1" << "A" << endl;
        out << "2" << "B" << endl;
        out << "3" << "C" << endl;
        out << "4" << "D" << endl;
        out << "5" << "E" << endl;
        out << "6" << "F" << endl;
    }

    return a.exec();
}

这是上述程序生成的输出:

1    A    
    2    B    
    3    C    
    4    D    
    5    E    
    6    F    

注意到底部五行的缩进了吗?这是我的问题,我不希望缩进开始新行。我希望每一行都从第 0 列开始,并写入一个五列宽(我的字段宽度)的值,并使其左对齐。

我尝试过使用这些参数一段时间,但没有运气。如果我能让这个在上面的小测试程序中工作,我想我可以成功地将这个更改移植到我的更大的写入文本文件的程序中。

最佳答案

克服这个问题的一种方法是在写入 endl 之前和之后使用 qSetFieldWidth。在写入 endl 之前将宽度设置为零,然后再次设置为之前的值。

它不会对您的代码进行太大更改,因为方便的 qSetFieldWidth 函数相当于 QTextStream::setFieldWidth :

#include <QCoreApplication>
#include <QTextStream>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("testfile.txt");

    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);

        out.setFieldAlignment(QTextStream::AlignLeft);
        out.setFieldWidth(5);

        out << "1" << "A" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
        out << "2" << "B" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
        out << "3" << "C" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
        out << "4" << "D" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
        out << "5" << "E" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
        out << "6" << "F" << qSetFieldWidth(0) << endl <<qSetFieldWidth(5);
    }

    return a.exec();
}

现在的结果是:

1    A    
2    B    
3    C    
4    D    
5    E    
6    F  

关于c++ - QTextStream格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972476/

相关文章:

c++ - 如何识别阻碍我的程序在 32 核 CPU 上良好扩展的瓶颈?

android - Qt 无法在 Android 模拟器上绘制

java - 字节数组未完全消耗

c++ - 在 C++ 中使用 ifstream 逐行读取文件

java - 磁盘上的十个最新文件

c++ - 如何在 C/C++ 中使用包含空格的路径名在 Windows 下调用 popen()?

c++ - VS2010 C++优化是否做循环展开

c++ - 如何推断 for_each 的模板参数函数

c++ - 使用 SFML 和 Qt

c++ - QStringList.append() 在 OS X 上崩溃