本人刚学Qt
在跟着b站Qt视频学习的时候,有一个四则运算计算器,代码最后检查了几遍都没敲错,然后运行后出现了如下的错误提示
在widget.cpp代码区里面标出来的是这段:
在百度查了一堆,这段代码代码都一样,有一个回答是说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()方法
原型
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"
很遗憾,您没有提供问题和参考资料中的有关四则运算计算器的代码,无法确定错误的具体原因。请提供代码片段或更具体的错误提示以便给出解决方案。
这个问题解决啦
将错误代码改成了下面的
QString expression = "1+2";
QByteArray ba = expression.toUtf8();
strcpy(opt, ba.data());
问题应该在于QString和QByteArray之间的类型转换,就是得使用QString的toUtf8()
函数将QString转换为其字节。