关于#QT#的问题,如何解决?

本人刚学Qt
在跟着b站Qt视频学习的时候,有一个四则运算计算器,代码最后检查了几遍都没敲错,然后运行后出现了如下的错误提示

img

在widget.cpp代码区里面标出来的是这段:

img

在百度查了一堆,这段代码代码都一样,有一个回答是说Qt更新以后,QString需要单独声明
但是也也不知道从哪下手

有没有学Qt的大lao,解答一下我的疑惑,感谢!

附带一下头文件的代码,感觉会不会是头文件的问题呢


#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QStack>
#include <qstring>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget

{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_12_clicked();

    void on_pushButton_11_clicked();

    void on_pushButton_10_clicked();

    void on_pushButton_8_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_20_clicked();

    void on_pushButton_19_clicked();

    void on_pushButton_18_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_13_clicked();

    void on_pushButton_16_clicked();

    void on_pushButton_14_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_9_clicked();

    void on_pushButton_17_clicked();

    void on_pushButton_15_clicked();

private:
    Ui::Widget *ui;
    QString expression;

    int Priority(char ch);
};

#endif // WIDGET_H


错误里面写的很清楚了,QByteArray的append()不能用QString做参数
要把QString转成QByteArray最简单的方法是用QString的toUtf8()方法

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/690889
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:解决Qt调试器中QString显示不全的方法
  • 除此之外, 这篇博客: 【Qt笔记】[帮助文档]——类QString:取子串函数mid()、left()、right() ——QT怎么取字符串子串切片中的 mid()函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 原型

    QString QString::mid(int position, int n = -1) const

    返回一个从position开始,长度为n的QString 类型的子串。
    当position的下标值超出字符串长度时,返回null;当从position开始的子串长度不够n或n为-1(缺省时的默认值也为-1),函数返回从position开始到结尾的子串。

    Returns a string that contains n characters of this string, starting
    at the specified position index. Returns a null string if the position
    index exceeds the length of the string. If there are less than n
    characters available in the string starting at the given position, or
    if n is -1 (default), the function returns all characters that are
    available from the specified position.

    例子:

      QString x = "Nine pineapples";
      QString y = x.mid(5, 4);            // y == "pine"
      QString z = x.mid(5);               // z == "pineapples"
    
  • 您还可以看一下 夏曹俊老师的C++QT5跨平台界面编程原理和实战大全课程中的 QString查找_截断_替换_分割字符串接口讲解小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    很遗憾,您没有提供问题和参考资料中的有关四则运算计算器的代码,无法确定错误的具体原因。请提供代码片段或更具体的错误提示以便给出解决方案。

这个问题解决啦
将错误代码改成了下面的

 
QString expression = "1+2";
QByteArray ba = expression.toUtf8();
strcpy(opt, ba.data());

问题应该在于QString和QByteArray之间的类型转换,就是得使用QString的toUtf8()函数将QString转换为其字节。