我经常使用普通的
if (Value * value = getValue())
{
// do something with value
}
else
{
// handle lack of value
}
Run Code Online (Sandbox Code Playgroud)
现在,我也经常这样做
QString error = someFunctionReturningAnErrorString(arg);
if (!error.isEmpty())
{
// handle the error
}
// empty error means: no error
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但我希望error变量的范围是if-block.那有一个很好的习语吗?显然,我可以将整个部分包装在另一个块中.
显然,这不起作用:
if(QString error = someFunctionReturningAnErrorString(arg), !error.isEmpty())
{
// handle the error
}
// empty error means: no error
Run Code Online (Sandbox Code Playgroud)
不幸的是(但有充分的理由)QString无法转换为bool,所以这也不起作用:
if(QString error = someFunctionReturningAnErrorString(arg))
{
// handle the error
}
// empty error …Run Code Online (Sandbox Code Playgroud) 我想将数字转换为QString3位有效数字.
QString::number(myNumber,'f',3);
Run Code Online (Sandbox Code Playgroud)
做的工作但仍然落后零.没有它们如何使用它.
我也试过了'g',哪些不应该留下那些零:
QString::number(myNumber,'g',3);
Run Code Online (Sandbox Code Playgroud)
但是例如472.76被转换为473.这让我感到惊讶.为什么'g'选择这样呢?
但是我对'f'格式很感兴趣.所以主要的问题是如何在'f'没有尾随零的情况下完成它?
输入 - >所需的输出
472.76 - > 472.76
0.0766861 - > 0.077
180.00001 - > 180
QString::arg()当字符串包含位置标记之后的数字时,会出现问题.从QString::arg()功能描述中不清楚在这种替换的情况下会发生什么:
QString("String for replacement %1234").arg("blah");
Run Code Online (Sandbox Code Playgroud)
这会导致"String for replacement blah234"或"String for replacement blah34"?
我查看了QT的源代码来回答这个问题.看起来寻找位置标记的算法似乎是"贪婪的",并且在上面的例子中它将采用两个数字.
以下是QString::arg()(QT 4.8.4)中使用的QT函数的来源:
static ArgEscapeData findArgEscapes(const QString &s)
{
const QChar *uc_begin = s.unicode();
const QChar *uc_end = uc_begin + s.length();
ArgEscapeData d;
d.min_escape = INT_MAX;
d.occurrences = 0;
d.escape_len = 0;
d.locale_occurrences = 0;
const QChar *c = uc_begin;
while (c != uc_end) {
while (c != uc_end && c->unicode() != '%')
++c;
if (c == uc_end)
break; …Run Code Online (Sandbox Code Playgroud) 有没有办法绘制有下标的固定文本.我的目标是:"K_max = K_2.3"
QString equation="K_max=K_2 . 3";
painter.drawText( QRect(x, y , width, y+height), Qt::AlignLeft|Qt::AlignVCenter, equation);
Run Code Online (Sandbox Code Playgroud)
我也尝试使用html标签格式化文本,但它没有帮助(标签打印了文本):
QString equation="<p>K<sub>max</sub></p>=<p>K<sub>2</sub></p>.3"
Run Code Online (Sandbox Code Playgroud) 我想在C++中使用Qt做这样的事情:
int i = 5;
QString directory = ":/karim/pic" + i + ".jpg";
Run Code Online (Sandbox Code Playgroud)
在哪里+意味着我想连接字符串和整数(也就是说,directory应该是:/karim/pic5.jpg).我怎样才能做到这一点?
我有一个关于将十进制数格式化为某种QString格式的问题.基本上,我的程序中有一个输入框,可以取任何值.我希望它将此框中的值转换为格式"+05.30"(基于值).该值将限制为+/- 99.99.
一些例子包括:
.2 - > +00.02
-1.5 - > -01.50
9.9 - > +09.90
我正在考虑使用这样的转换器,但它会有一些明显的问题(没有前导0,没有前导+符号).
QString temp = QString::number(ui.m_txtPreX1->text().toDouble(), 'f', 2);
Run Code Online (Sandbox Code Playgroud)
这个问题有一些相似之处,但并没有将前端和后端填充连接在一起.
有关如何解决这个问题的任何想法?非常感谢您的帮助!谢谢!
我想检测用户是否在文件保存对话框中输入了非ASCII(否则错误地称为Unicode)字符(例如,り).当我使用Qt时,任何非ASCII字符都正确保存在QString中,但我无法弄清楚在将字符串转换为ASCII之前如何确定该字符串中的任何字符是否为非ASCII.上面的那个字符最终被写入文件系统り.
我有这两个变量,我想将数据转换为dataToString.
QJSonArray data;
Qstring dataToString;
Run Code Online (Sandbox Code Playgroud)
在数据中有一个巨大的json像:
{
"properties": [
{
"version":"1",
"finish":"0",
"num":3,
"running":false,
"time":"00:20:00",
"player1":"John",
"player2":"",
"player3": "Peter",
"player4":"",
"team1":"",
"team2":"",
"tournament":"",
"lap":""
}
],
"game": [
{
"serve":true,
"score":"32",
"data":"0"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做 ?谢谢.
我将GoogleTest(GTest)框架与Qt5应用程序结合使用.
每当使用QString参数进行测试失败时,框架会尝试打印所有涉及的值.但是,它无法自动处理外来类型(在这种情况下为Qt5的QString).
QString test = "Test";
ASSERT_EQ(test, "Value");
Run Code Online (Sandbox Code Playgroud)
如何让GoogleTest自动打印QStrings(=无需每次手动转换它们)?