Search code examples
c++qtqstringqtcoreqtextedit

display formatted text to QTextEdit like in C's printf


I would like to display a double in qttextedit. For example, if i have

double f = 0.0;

and I do

ui.textEdit->insertPlainText("f = "+ QString::number(f ));

I get

f =0

I would like to show

f = 0.000

with as many decimal places as I want..

Anyway to do that..


Solution

  • You have at least two Qt options:

    1) QString & QString::sprintf ( const char * cformat, ... )

    QString result;
    double f = 0.000;
    result.sprintf("%.3f", f);
    ui.textEdit->insertPlainText(result);
    

    2) QString QString::arg ( double a, int fieldWidth = 0, char format = 'g', int precision = -1, const QChar & fillChar = QLatin1Char( ' ' ) ) const

    double f = 0.000;
    QTextStream standardOutput(stdout);
    standardOutput << QStringLiteral("f = %1").arg(f, 0, 'f', 3) << "\n";
    

    Here you can find my test code that is easy to run in order to verify.

    main.cpp

    #include <QString>
    #include <QTextStream>
    
    int main()
    {
        QString result;
        double f = 0.000;
        result.sprintf("%.3f", f);
        QTextStream standardOutput(stdout);
        standardOutput << QStringLiteral("f = %1").arg(f, 0, 'f', 3) << "\n";
        standardOutput << "f = " << result << "\n";
        return 0;
    }
    

    main.pro

    TEMPLATE = app
    TARGET = main
    QT = core
    SOURCES += main.cpp
    

    Build and Run

    qmake && make && ./main
    

    Output

    f = 0.000
    f = 0.000