How to format a QString?

前端 未结 3 773
眼角桃花
眼角桃花 2021-01-31 01:07

I\'d like to format a string for Qt label, I\'m programming in C++ on Qt.

In ObjC I would write something like:

NSString *format=[NSString stringWithFor         


        
相关标签:
3条回答
  • 2021-01-31 01:34

    Use QString::arg() for the same effect.

    0 讨论(0)
  • 2021-01-31 01:40

    You can use the sprintf method, however the arg method is preferred as it supports unicode.

    QString str;
    str.sprintf("%s %d", "string", 213);
    
    0 讨论(0)
  • 2021-01-31 01:53

    You can use QString.arg like this

    QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane");
    // You get "~/Tom-Jane.txt"
    

    This method is preferred over sprintf because:

    Changing the position of the string without having to change the ordering of substitution, e.g.

    // To get "~/Jane-Tom.txt"
    QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane");
    

    Or, changing the type of the arguments doesn't require changing the format string, e.g.

    // To get "~/Tom-1.txt"
    QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1));
    

    As you can see, the change is minimal. Of course, you generally do not need to care about the type that is passed into QString::arg() since most types are correctly overloaded.

    One drawback though: QString::arg() doesn't handle std::string. You will need to call: QString::fromStdString() on your std::string to make it into a QString before passing it to QString::arg(). Try to separate the classes that use QString from the classes that use std::string. Or if you can, switch to QString altogether.

    UPDATE: Examples are updated thanks to Frank Osterfeld.

    UPDATE: Examples are updated thanks to alexisdm.

    0 讨论(0)
提交回复
热议问题