QStringList转换为最有效的方法是什么QByteArray?
我发现了很多类似转换的例子,但从来都不是我需要的,或者只是不必要地太复杂了。
该代码清理字符串输入,然后将其转换为QByteArray. 我正在为后一部分而苦苦挣扎。
void MainWindow::on_suicideButton_clicked()
{
QString input = ui->lineEdit->text();
try{
if(ui->lineEdit->text().contains("0x")||ui->lineEdit->text().contains(",")||ui->lineEdit->text().contains("-"))
{
input = input.replace("0x","");
if (input.contains(',')) input = input.replace(",", "");
// QString trim = input.trimmed();
// input = trim;//.split(',', ' ', '-');
QStringList inputArray = input.split('-');
QByteArray output = inputArray;
}
//printf("%s\n", input);
ui->lineEdit->setText(input);
}
catch (const std::bad_alloc &) {input = " ";}
}
Run Code Online (Sandbox Code Playgroud)
QStringList inputArray = input.split('-'); 很重要(或者至少我相信如此),因为我需要将字节分割成单独的块,以便对它们执行各种操作。
这是一个示例,以便您了解我想要执行什么样的操作:
char MainWindow::checkSum(QByteArray &b)
{
char val = 0x00;
char i;
foreach (i, …Run Code Online (Sandbox Code Playgroud) 我正在使用 QT 5.7 作为一个程序,我必须将 QPixmap 转换为 base64 QString 格式。我尝试首先将 QPixmap 转换为 cv::Mat,然后添加我现有的转换流程。
Qpixmap pix;
cv::Mat pixData(pix.rows(),pix.cols(),CV_8UC3,pix.scanline());
std::vector<uchar> IMbuffer;
cv::imencode(".png", pixData, IMbuffer);
QByteArray byteArray = QByteArray::fromRawData((const char*)IMbuffer.data(), IMbuffer.size());
QString base64Image(byteArray.toBase64());
Run Code Online (Sandbox Code Playgroud)
但它返回错误:
error: 'class QPixmap' has no member named 'rows'
cv::Mat pixData(pix.rows(),pix.cols(),CV_8UC3,pix.scanline());
^
Run Code Online (Sandbox Code Playgroud)
所以很明显,从 QPixmap 到 cv::Mat 的这种转换是不兼容的。那么有没有什么简单的方法可以将QPixmap转换为base64 QString呢?
我正在使用Qt Creator构建我的第一个Qt应用程序,一切都很顺利,直到我从一条明显无害的线路开始得到一个奇怪的SIGSEGV.
这是错误:
程序接收信号SIGSEGV,分段故障.QBasicAtomicInt :: ref(this = 0x0)中的0x0804e2fe位于/usr/lib/qt/include/QtCore/qatomic_i386.h:120
通过在gdb上回溯异常,我发现当我返回属性时,一个简单的getter将NULL指针传递给克隆构造函数.
Backtrace输出:
(gdb) backtrace
#0 0x0804e2fe in QBasicAtomicInt::ref (this=0x0) at /usr/lib/qt/include/QtCore/qatomic_i386.h:120
#1 0x0804eb1b in QString (this=0xbfcc8e48, other=@0xbfcc8e80) at /usr/lib/qt/include/QtCore/qstring.h:712
#2 0x0805715e in Disciplina::getId (this=0xbfcc8e7c) at disciplina.cpp:13
[...]
检查传递给QString构造函数的指针:
(gdb)x 0xbfcc8e80
0xbfcc8e80:0x00000000
这是门徒.13:13
QString Disciplina::getId()
{
return id;
}
Run Code Online (Sandbox Code Playgroud)
所以,所有指向QString的复制构造函数的点都接收到一个空指针,这对我来说毫无意义.id被声明为私有QString.
private:
QString id;
Run Code Online (Sandbox Code Playgroud)
好吧,我不知道会发生什么,而且我的调试技巧只能到目前为止,所以如果有人可以提出一个想法我真的很高兴.
谢谢.
编辑
根据要求提供更多代码.
disciplina.h
#ifndef DISCIPLINA_H
#define DISCIPLINA_H
#include <QString>
#include <QMap>
#include "curso.h"
#include "turma.h"
class Curso;
class Turma;
class Disciplina
{
private:
unsigned …Run Code Online (Sandbox Code Playgroud) 我希望能够将图像作为文本保存在xml文件中,我无法找到一种有效的方法来完成它!
到目前为止我试过:
QByteArray ImageAsByteArray;
QBuffer ImageBuffer(&ImageAsByteArray);
ImageBuffer.open(QIODevice::WriteOnly);
rImage.save(&ImageBuffer, "PNG");
return QString(ImageAsByteArray.toBase64());
Run Code Online (Sandbox Code Playgroud)
尽管它正在工作,但结果是一个巨大的文件!我尝试在那里添加一些QCompress但没有太大的成功......实际上QCompress似乎没有压缩任何东西......
我想我的做法是错误的,但有人可以点赞我的道路吗?
任何人都知道为什么C++标准库' std::string类(或更一般地说是std::basic_string类模板)缺少普通的字符串功能,如大写,子串替换和修剪等,与Qt的QString类或Python字符串相比?
我有一个STL代码库需要在QtQuick 2.0应用程序(图形界面)和纯粹的STL应用程序(服务器)之间共享.接口可以从共享STL代码库派生其类,因此它可以具有Q_PROPERTYs,信号,槽等,但共享数据结构需要保持仅STL.
我想避免数据重复(std::string- > QString等)所以我试图std::string在Q_PROPERTY系统内直接使用.使用Q_DECLARE_METATYPE(std::string)和qRegisterMetaType<std::string>();声明属性,如:
Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)
Run Code Online (Sandbox Code Playgroud)
使我的代码编译,但QML仍然不喜欢std::strings.
用以下内容编写文本字段:
Text
{
text: myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)
Unable to assign std::string to QString在附加现有QML字符串时会产生警告:
Text
{
text: "text: " + myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)
使Text控制显示变得怪异QVariant(std::string).
我究竟做错了什么?
QString line = "example string";
Run Code Online (Sandbox Code Playgroud)
现在我想删除'example'和'string'之间的空格,以便我得到一个像这个"examplestring"的字符串.Qt中有一个函数可以删除给定索引下的字符,还是我应该自己编写这个函数?
我想得到第一个字Qstring.
例如String1 = "Read from file1".我想提取string2 = "Read".我想基于空格提取子字符串.
如果我遇到我的第一个空格string1,我需要的那部分string1来string2.
我有一个函数,我检查字符串的结尾,以确定扩展名.
我使用endsWith第二个参数的方法:Qt::CaseInsensitive.
现在的问题是,对于某些扩展它可以工作,而对于其他扩展则不然.字符串只能用普通的拉丁字符书写,没什么特别的.
在调试器中,字符串看起来没问题,在最终字符之后没有尾随空格或任何内容.
它应该工作,但它只适用于某些文件扩展名.这是我的支票样本:
if(myString.endsWith(".mp3", Qt::CaseInsensitive) || myString.endsWith(".wav", Qt::CaseInsensitive) || myString.endsWith(".flac", Qt::CaseInsensitive) ||
myString.endsWith(".ape", Qt::CaseInsensitive))
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
myString是 "Glory.mp3"
它仅适用于某些文件扩展名.
这是一个非工作案例:
else if(myString.endsWith(".zip", Qt::CaseInsensitive) || myString.endsWith(".rar", Qt::CaseInsensitive) || myString.endsWith(".tar", Qt::CaseInsensitive) ||
myString.endsWith(".tar.gz", Qt::CaseInsensitive), myString.endsWith(".7z", Qt::CaseInsensitive))
{
DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
myString是 "magnets.zip"
我只是想用qDebug以下方法打印一个数字:
qDebug() << QString::number(03001);
Run Code Online (Sandbox Code Playgroud)
但结果是:
"1537"
Run Code Online (Sandbox Code Playgroud)
如果我尝试打印没有第一个零:
qDebug() << QString::number(3001);
Run Code Online (Sandbox Code Playgroud)
结果是正确的:
"3001"
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我正在使用Qt 5.3.