标签: qstring

Qt - QStringList 到 QByteArray

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)

c++ qstring qt qbytearray

2
推荐指数
1
解决办法
6281
查看次数

如何在Qt中将QPixmap转换为base64 QString?

我正在使用 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呢?

base64 qstring qt qpixmap

2
推荐指数
1
解决办法
2201
查看次数

Qt 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)

c++ qstring qt pointers

1
推荐指数
1
解决办法
6358
查看次数

将图像转换为文本

我希望能够将图像作为文本保存在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似乎没有压缩任何东西......

我想我的做法是错误的,但有人可以点赞我的道路吗?

qstring qt text qpixmap qimage

1
推荐指数
1
解决办法
7259
查看次数

缺少std :: string功能

任何人都知道为什么C++标准库' std::string类(或更一般地说是std::basic_string类模板)缺少普通的字符串功能,如大写,子串替换和修剪等,与Qt的QString类或Python字符串相比?

c++ string qstring std

1
推荐指数
1
解决办法
1093
查看次数

在QML中使用std :: string

我有一个STL代码库需要在QtQuick 2.0应用程序(图形界面)和纯粹的STL应用程序(服务器)之间共享.接口可以从共享STL代码库派生其类,因此它可以具有Q_PROPERTYs,信号,槽等,但共享数据结构需要保持仅STL.

我想避免数据重复(std::string- > QString等)所以我试图std::stringQ_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).

我究竟做错了什么?

c++ qstring qt stdstring qml

1
推荐指数
1
解决办法
1958
查看次数

QString字符擦除功能

QString line = "example string";
Run Code Online (Sandbox Code Playgroud)

现在我想删除'example'和'string'之间的空格,以便我得到一个像这个"examplestring"的字符串.Qt中有一个函数可以删除给定索引下的字符,还是我应该自己编写这个函数?

c++ qstring qt

1
推荐指数
2
解决办法
2万
查看次数

如何从Qstring获得第一个单词

我想得到第一个字Qstring.

例如String1 = "Read from file1".我想提取string2 = "Read".我想基于空格提取子字符串.

如果我遇到我的第一个空格string1,我需要的那部分string1string2.

qstring qt qregexp

1
推荐指数
2
解决办法
8148
查看次数

QString :: endsWith()不起作用?

我有一个函数,我检查字符串的结尾,以确定扩展名.

我使用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"

c++ qstring qt

1
推荐指数
1
解决办法
1051
查看次数

qDebug打印错误的数字

我只是想用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.

c++ qstring qt qdebug

1
推荐指数
1
解决办法
329
查看次数

标签 统计

qstring ×10

qt ×9

c++ ×7

qpixmap ×2

base64 ×1

pointers ×1

qbytearray ×1

qdebug ×1

qimage ×1

qml ×1

qregexp ×1

std ×1

stdstring ×1

string ×1

text ×1