【问题标题】:Qt - remove substring from QString [closed]Qt - 从 QString 中删除子字符串 [关闭]
【发布时间】:2015-10-04 08:58:10
【问题描述】:

在我的 Qt 项目中,我有特定的字符串 ""dsfsd we rrh erh er""。我想像这样删除所有子字符串: 
并保留其他字符串。

QString messageText = m_messageEdit->toPlainText();

有什么建议吗?

【问题讨论】:

  • 您在该代码中存在内存泄漏:您分配内存并将指向内存的指针分配给msg_char but directly overwrite that pointer with a pointer to messageText.data()`,这使您丢失了指向您分配的内存的原始指针。
  • 至于错误,如果您仔细阅读它们,它们是非常清楚的。首先,QChar 不是您系统上的 char
  • 请写出您想从字符串中删除的确切内容(注意在编辑模式下这些字符是不可见的,并且它们看起来不正确)?如果您只想删除某些内容,为什么要转换为 utf8?对QTextEdit 进行操作的最佳方式是QTextDocumentQTextCursor!到 QString 和 utf8 的转换链非常昂贵。
  • 我几乎无法解析这个问题。所有这些 Unicode 废话是怎么回事?你不能把问题简单化吗?

标签: c++ qt unicode utf-8


【解决方案1】:

错误很明显:

  1. QChar* 与 char* 不同。这意味着 char *msg_char = new QChar[k]; 无效,它应该类似于 QChar *msg_char = new QChar[k]; 或者声明一个 char* 然后将其传递给 QChar*

  2. 此处相同,但在 msg_char = messageText.data(); 中。您的 messageText.data();返回 QChar*,而不是 char*

  3. 同样,它抱怨 msg_char 不是它对 fromAscii 的期望(算上你没有强制代码)

  4. QString str = QString::fromUtf8 (messageText); 删除 fromUsf8 和 ( 之间的空格并确定 messageText 的类型。然后你也可以尝试使用 messageText.toStdString() 你有很多函数,如 .toStdString() 或 .toAscii () 或 .toLatin1() ...

如果你使用的是c++11并且类型有问题,可以使用auto类型:

auto *msg_char = new QChar[k];

然后打印msg_char的类型就可以看到类型了。

请记住,QString 和 std::string 是不同的东西,因此您将 QString::fromUtf8() 与 QString 和 string.toUtf8() 一起使用。对于 std::string 和 QChar 和 char 相同(QSomething 是来自 Qt 的类,其他来自 c++)

编辑:你为什么改变了所有完整的问题???您和其他用户是否更容易再做一个或删除它,以便 cmets ans 的答案仍然符合问题??

您需要查看std::string 库并在其中搜索其功能和方法:std::string 这里有您需要的所有内容以及易于理解的示例

【讨论】:

    【解决方案2】:

    如果您的目标只是转换为 utf8,那么简单的方法就是使用 std::string

    QString var = "Hello World";
    std::string varUtf8 = var.toUtf8().constData();
    

    如果你的 unreadle char 总是在最后,你可以使用 substr 删除它们;

    std::string var =var.substr(0, str.length()-1);
    

    或者你可以使用std::string.erase();

    【讨论】:

    • 我想删除不可读的子字符串。
    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多