728x90
QString의 toInt는 정수형태의 문자열을 정수로 변환시켜주는 함수입니다. 그런데 이 호출하는 함수에 맞지 않는 문자열 값을 가지고 있으면 제대로 처리가 되지 않습니다.
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString sUInt = "123";
QString sInt = "-123";
QString sFloat = "123.12";
bool ok;
qDebug() << sUInt.toUInt(&ok) << ok;
qDebug() << sInt.toUInt(&ok) << ok;
qDebug() << sFloat.toUInt(&ok) << ok;
qDebug() << sUInt.toInt(&ok) << ok;
qDebug() << sInt.toInt(&ok) << ok;
qDebug() << sFloat.toInt(&ok) << ok;
return a.exec();
}
/* 실행결과
123 true
0 false
0 false
123 true
-123 true
0 false
*/
위 실행결과를 보면 알 수 있듯이 해당 함수를 통해 얻고 싶은 자료형이 아닌 문자열이 호출되면 0이 반환되고 인자로 넘겨준 flag에는 false 가 나오게 됩니다.
이를 방지하기 위해서는 toInt(), toFloat가 아닌 atoi, atof를 사용하는 것이 좋습니다.
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString sUInt = "123";
QString sInt = "-123";
QString sFloat = "123.12";
bool ok;
qDebug() << sUInt.toUInt(&ok) << ok;
qDebug() << sInt.toUInt(&ok) << ok;
qDebug() << sFloat.toUInt(&ok) << ok;
qDebug() << sUInt.toInt(&ok) << ok;
qDebug() << sInt.toInt(&ok) << ok;
qDebug() << sFloat.toInt(&ok) << ok;
qDebug() << atoi(sUInt.toLocal8Bit().constData());
qDebug() << atoi(sInt.toLocal8Bit().constData());
qDebug() << atoi(sFloat.toLocal8Bit().constData());
return a.exec();
}
/* 실행결과
123 true
0 false
0 false
123 true
-123 true
0 false
123
-123
123
*/
728x90
'Programming > Qt' 카테고리의 다른 글
[Qt] QTableWidget header 정보는 남기고 내용만 지우기 (0) | 2024.07.18 |
---|---|
[Qt] Qt + PCAN API를 이용한 CAN Chat 프로그램 (0) | 2024.07.18 |
[Qt] Drag&Drop으로 QTreeWidget 제어하기 (1) | 2024.06.14 |
[Qt] Qt Concurrent를 통한 비동기 처리 (0) | 2024.01.12 |
[Qt] Windows cmd 명령어 실행 및 결과 얻어오기 (0) | 2023.12.14 |