我正在努力将一些旧代码从1998年带到21世纪.该过程的第一步是将printf语句转换为QString变量.不管我多少次回头看看printf,我总是忘记了一件事.所以,为了好玩,让我们一起解码它,为了时间的缘故,并在此过程中为Stackoverflow 创建第一个小'printf primer'.
在代码中,我遇到了这个小宝石,
printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);
Run Code Online (Sandbox Code Playgroud)
如何格式化变量a,b,c,d,e,f,g?
我有以下问题.我试图将我编写的大代码与Qt接口集成.
我的一些功能返回std::string.我没有成功QLineEdit::setText接受它们(返回的其他功能char不会给我带来麻烦).
我该怎么办?谢谢!
朱塞佩
我没有设法简单地打印包含特殊字符的QString变量.
我总是得到一个UnicodeEncodeError:
'ascii'编解码器无法对字符进行编码....
这是我尝试过的代码没有成功:
var1 = "éé" #idem with u"éé"
var2 = QString (var1)
print var2
--->>> UnicodeEncodeError
print str(var2)
--->>> UnicodeEncoreError
var3 = QString.fromLocal8Bit (var1) #idem with fromLatin1 and fromUtf8
print var3
--->>> UnicodeEncodeError
codec = QTextCodec.codecForName ("UTF-8") #idem with ISO 8859-1
var4 = codec.toUnicode (var2.toUtf8().data()) #idem with toLatin1 instead of toUtf8
print var4
--->>> UnicodeEncodeError
Run Code Online (Sandbox Code Playgroud)
我也试过用:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))
Run Code Online (Sandbox Code Playgroud)
我真的需要打印一个QString变量,而不是QByteArray或其他对象.
我需要一个优雅的C++函数,它接受包含unix时间的QString参数(例如1295874681)并将其转换为包含QString的标准时间格式(例如Mon,2011年1月24日13:11:21 GMT)并返回它.
我正在使用Qt解决逻辑问题.我有两个QString的QSets:
QSet<QString> set1: [ "aaa", "BBB" ]
QSet<QString> set2: [ "aaa", "bbb", "ccc", "ddd" ]
Run Code Online (Sandbox Code Playgroud)
我想从set2中减去set1,所以我使用:
set2.subtract( set1 );
Run Code Online (Sandbox Code Playgroud)
我得到:
set2: ["bbb", "ccc", "ddd"]
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,"bbb"不会从set2中删除,尽管set1包含此记录.那是因为默认的QString :: contains方法(它是QSet :: subtract使用的方法)区分大小写.
还有另一个QString :: contains方法,它接受一个参数来定义区分大小写模式,但我真的不知道如何使用它.
有没有人知道如何在两个QString的QSet之间进行不区分大小写的减法,好吗?
这是我到目前为止所尝试的:
转换为大写 set2的两个集合都显示在列表中,因此如果所有项目都是大写(或者都不是小写),则不会很奇怪.
扩展QSet类和覆盖减法方法我试图用MyStringSet自定义类扩展这个类,但我对Qt不太满意,这对我来说非常复杂.
我正在使用C++和QT,并且德语变音符号有问题.我有一个像"wirsindmüde"的QString,并希望将其更改为"wir sind mü de",以便在QTextBrowser中正确显示它.
我试着这样做:
s = s.replace( QChar('ü'), QString("ü"));
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
也
s = s.replace( QChar('\u00fc'), QString("ü"))
Run Code Online (Sandbox Code Playgroud)
不起作用.
当我循环遍历字符串中的所有字符时,'ü'是两个字符.
有谁能够帮我?
QString可以连接Qt ,operator%它使用表达式模板来预先计算结果字符串的大小并优化几个链式调用operator+.有关详细信息,请参阅我的这个问题.
为什么没有std::basic_string采用类似的结构?这甚至是每个C++ 11允许的吗?我看到只有优点,显然ABI兼容性可以被库实现者在他们想要的时候打破(并且C++ 11提供了一个很好的理由,甚至对于libstdc ++).
每当我尝试将一个字母转换std::string成一个QString字母(' ß '),QString就会变成像" Ã "或其他一些非常奇怪的字母.怎么了?我使用了这段代码并没有引起任何错误或警告!
std::string content = "Heißes Teil.";
ui->txtFind_lang->setText(QString::fromStdString(content));
Run Code Online (Sandbox Code Playgroud)
在std::string与这个角色没有问题.我甚至把它写成文本文件没有问题.那么我做错了什么?
我想将浮点数转换为QString但替换为.a ,.
例如,我希望将float 12.95转换为看起来像的QString 12,95.
我想我可以做类似的事情:
QString().sprintf("%something", myFloat);
Run Code Online (Sandbox Code Playgroud)
但是我该怎么写而不是%something?
也许我可以这样做:QString::number(myFloat, 'f').replace(".", ",")但它不是很漂亮......
我想分割一个QString,但根据文档,split函数只允许在发生分割的字符时进行拆分.我想要的只是在第一次出现角色的地方分开.
例如:
5+6+7默认情况下split()会以包含的列表结尾["5","6","7"]
我想要的是:只有两个元素的列表 - > ["5","6+7"]
提前感谢您的回答!