Вставка целочисленной переменной в качестве аргумента в Qstring и отправка ее в Serial.write - PullRequest
0 голосов
/ 16 февраля 2019

Я создаю управляющее программное обеспечение в Qt 5.3.0 для 3D-принтера.Я хочу отправлять команды на этап трансляции через последовательный порт.Я сталкиваюсь с проблемой вызова перегруженного arg (QByteArray) неоднозначно.

Это дает мне ошибку, говоря: call of overloaded 'arg(QByteArray)' is ambiguous

Я попытался найти документацию для добавления целого числа в QString, Я думаю, что это ошибка при типизации.

bool DLP3Dprinter::StepMotorMotion(unsigned char Type, unsigned char SpeedValue[2], unsigned int TravelValue){

const double stepSize = 0.047625;
int Microsteps = (int)(TravelValue/stepSize); //to convert from micrometers to microsteps
int Speed = (int)(SpeedValue*(1.6384/stepSize)); //to convert um/s to Zaber units /s

switch(Type){
        case ManualUp:
        Serial.write(QString("/1 set maxspeed %1").arg(QByteArray::number(Speed));  //Speed does not need to be set every time, only if it changes
        Serial.readAll();
        Serial.write(QString("/1 move rel %1").arg(QByteArray::number(Microsteps));
        Serial.readAll();
        break;

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вместо вызова .arg(QByteArray::number(x)) вы можете напрямую передать число как .arg(x).

QString str("I am %1 years old.");
int age = 100;
QString str1 = str.arg(QString::number(age));
QString str2 = str.arg(age);

Q_ASSERT(str1 == str2);

QString обеспечивает всеобъемлющие перегрузки для целочисленных аргументов, что позволяет нам удобно передавать переменныес разными типами.


Я думаю, что это ошибка при типизации.

Я думаю, это правильно.

Чтобы отбросить некоторыеВ свете ошибки неоднозначной перегрузки кажется, что QByteArray имеет частный operator int.(Это то, что я наблюдаю по окончании. Qt, по-видимому, не документирует это приведение типов, возможно, поскольку оно является закрытым.) Это подразумевает, что QByteArray может быть неявно преобразован в int.Это вызовет кучу перегрузок, помечая команду как неоднозначную.Вот некоторые из перегрузок, которые были выполнены (скопировано с qstring.h, не уверен, изменилось ли это после Qt 5.3).

QString arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const;
QString QString::arg(int a, int fieldWidth, int base, QChar fillChar);
QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar);
QString QString::arg(long a, int fieldWidth, int base, QChar fillChar);
QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar);
0 голосов
/ 16 февраля 2019

Это должно сделать

Serial.write(QString("/1 set maxspeed %1").arg(QString::number((Speed)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...