我已经编写了一个C++程序,我想为它编写一个GUI.我意识到Qt是一个很棒的工具,但是,Qt有它自己的类,这让我很困惑.例如:Qt有一个名为QString的类,而不是String.
我想知道我是否可以在C++中混合使用C++代码和Qt代码?
来自Symbian世界,我习惯尽可能多地使用堆来避免堆栈空间耗尽,尤其是在处理描述符时.CBase派生类总是在堆上动态分配,因为如果它们不是,它们的成员变量将保持未初始化.相同的约定是否适用于QObject派生类?
在Qt中,将(例如QString)放在堆栈上似乎很常见.当QString充当堆栈上的容器时,字符串内容是否放在堆上,或者是否所有内容都放在堆栈上?
我想有效地对 QByteArray 消息进行分区,因此我实现的这个函数采用字节(我想要提取的部分)和 toEnd 标志,该标志告诉我是否要提取第 1 部分直到数组末尾。我的直径是 spcae ' '
例如,如果我有:
ba = "HELLO HOW ARE YOU?"
ba1 = getPart(ba, 1, false) -> ba1 = "HELLO"
ba2 = getPart(ba, 2, true) -> ba2 = "HOW ARE YOU?"
ba3 = getPart(ba, 3, false) -> ba3 = "ARE"
Run Code Online (Sandbox Code Playgroud)
下面的函数工作得很好,但我想知道这是否有效。我应该考虑使用 split 函数吗?
QByteArray Server::getPart(const QByteArray message, int part, bool toEnd)
{
QByteArray string;
int startsFrom = 0;
int endsAt = 0;
int count = 0;
for(int i = 0; i < message.size(); i++) …Run Code Online (Sandbox Code Playgroud) 我很想找到有关上述错误的任何信息.
我正在研究visual studio 2010.当我编译我的项目(32位),在调试或发布时,我得到以下消息:
1> heterogeneous.obj:错误LNK2001:未解析的外部符号"__declspec(dllimport)public:class QString&_ thiscall QString :: operator =(class QString &&)"( _ imp _ ?? 4QString @@ QAEAAV0 @ $$ QAV0 @@ Z )
1> debug \nori.exe:致命错误LNK1120:1个未解析的外部
我在链接器 - >输入中链接了QtCore4.lib,我将Qt\4.8.2\lib添加到Linker-> General中的库目录,我包括Qt\4.8.2\include和Qt\4.8.2\include\QtCore在C/C++中 - >一般.在我看来,他们应该定义QString.我不知道还能做些什么.
非常感谢您的帮助.
我对 QProcess 有一个非常奇怪的问题,它的行为很奇怪。
我最后想要得到的是这样的东西(这是Windows 7中的cmd.exe)
C:\path_to_somewhere>cmd /c "C:\Program Files\path_to_dir\executable"
Run Code Online (Sandbox Code Playgroud)
(cmd是为了兼容QProcess的显示)
所以为了做类似的事情,我创建了这个:
QProcess proc;
QString command;
QStringList attributes;
command = "c:\\windows\\system32\\cmd.exe";
QStringList << QString("/c \"C:\\Program Files\\path_to-dir\\executable"");
proc.start(command, attributes);
Run Code Online (Sandbox Code Playgroud)
我得到的错误输出是:
Name '\"c:\Program Files\Quantum GIS Wroclaw\bin\gdalwarp.exe\"' is not recognized as
internat or external command, executable or batch file.
Run Code Online (Sandbox Code Playgroud)
(它是我从波兰语翻译过来的,所以英语可能有点不同)。
似乎 \ 字符在字符串中没有转义,而将 \" 保留为命令中的字符。我做错了什么?
我已经尝试过
proces.start(QString)
Run Code Online (Sandbox Code Playgroud)
函数与三重“\”\”,它也不起作用。我想这个问题的解决方案必须非常简单,我什至都没有想到它。
如何从Qt中删除字符串中的变音符号.例如,这个:
QString test = QString::fromUtf8("éçàÖœ");
qDebug() << StringUtil::removeAccents(test);
Run Code Online (Sandbox Code Playgroud)
应该输出:
ecaOoe
Run Code Online (Sandbox Code Playgroud) 我想有效地比较QString和std :: string的(in)相等.哪种方法最好,可能没有创建中间对象?
我从一个带有UTF8编码的XML文件中读取了一个字符串.我将此值存储在一个QString对象中,并将其与其他一些信息连接起来.我可以在QtCreator调试器中看到它QString保存了所需的值.
我需要将此字符串传递给另一个带const char *参数的库.我如何获得const char *请?我试过toLocal8bit(),toLatin1(),toUtf8()都没有运气.好像我错过了什么......
例如,我有一个 QString,里面有一些数字
first_34.33string
second-23.4string // In this case number is negative
Run Code Online (Sandbox Code Playgroud)
如何从字符串中提取数字?
编辑:
这个函数似乎可以工作,在回复中使用正则表达式:
float getNumberFromQString(const QString &xString)
{
QRegExp xRegExp("(-?\\d+(?:[\\.,]\\d+(?:e\\d+)?)?)");
xRegExp.indexIn(xString);
QStringList xList = xRegExp.capturedTexts();
if (true == xList.empty())
{
return 0.0;
}
return xList.begin()->toFloat();
}
Run Code Online (Sandbox Code Playgroud) I have a problem with tranformation from QString to QByteArray and then back to QString:
int main() {
QString s;
for(int i = 0; i < 65536; i++) {
s.append(QChar(i));
}
QByteArray ba = s.toUtf8();
QString s1 = QString::fromUtf8(ba);
if(areSame(s, s1)) {
qDebug() << "OK";
} else {
qDebug() << "FAIL";
outputErrors(s, s1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
As you can see I fill QString with all characters that are within 16bit range. and then convert them to QByteArray (Utf8) and …
qstring ×10
qt ×8
c++ ×6
qbytearray ×2
string ×2
diacritics ×1
escaping ×1
lnk2001 ×1
qobject ×1
qprocess ×1
qt-creator ×1
qtcore ×1
std ×1
stdstring ×1
substring ×1