본문 바로가기
놀기/Qt

[QT] 공백 (whitespace) 제거

by Hi~ 2023. 2. 11.

QT에서 공백 지우기는 간단하다.

공백만 지운다면 remove()를 사용하고 탭 또는 개행과 같은 문자까지 지우려면 simplified()를 같이 사용하면 된다.

 

단, 주의할 점은 두 함수가 어떻게 생겼냐는 것이다.

 

simplified()는 QString를 반환하고

QString simplified() const

replace는 QString&를 반환한다.

QString& replace(const QChar *before, qsizetype blen, const QChar *after, qsizetype alen, Qt::CaseSensitivity cs = Qt::CaseSensitive)

 

따라서, 아래와 같이 쓰는 실수를 해서는 안된다.

QString testString4 = testString.simplified().remove(QChar(' ')); → OK

QString testString6 = testString; 
testString6.simplified().remove(QChar(' ')); → Oooooooooooooops

 

https://doc.qt.io/qt-6/qstring.html

 

QString Class | Qt Core 6.4.2

 

doc.qt.io

 

테스트해보자.

#include <QCoreApplication>
#include <QTimer>
#include <QDebug>

void run_main(void)
{
    QString testString = "   ABCD\t\tEFG\n      12345\r     56    \n";
    fprintf(stderr, "- testString -------------------------\n");
    fprintf(stderr, "%s", testString.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");

    QString testString2 = testString.simplified();
    fprintf(stderr, "- testString2 ------------------------\n");
    fprintf(stderr, "%s", testString2.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");

    QString testString3 = testString;
    testString3.simplified();
    fprintf(stderr, "- testString3 ------------------------\n");
    fprintf(stderr, "%s", testString3.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");

    QString testString4 = testString.simplified().remove(QChar(' '));
    fprintf(stderr, "- testString4 ------------------------\n");
    fprintf(stderr, "%s", testString4.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");

    QString testString5 = testString.simplified();
    testString5.remove(QChar(' '));
    fprintf(stderr, "- testString5 ------------------------\n");
    fprintf(stderr, "%s", testString5.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");

    QString testString6 = testString;
    testString6.simplified().remove(QChar(' '));
    fprintf(stderr, "- testString6 ------------------------\n");
    fprintf(stderr, "%s", testString6.toLocal8Bit().constData());
    fprintf(stderr, "\n\n");
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTimer::singleShot(0,[](){
         run_main();
         QCoreApplication::exit(0);
    });

    return a.exec();
}

 

위의 코드를 실행하면 아래와 같다.

- testString -------------------------
   ABCD		EFG
     56    


- testString2 ------------------------
ABCD EFG 12345 56

- testString3 ------------------------
   ABCD		EFG
     56    


- testString4 ------------------------
ABCDEFG1234556

- testString5 ------------------------
ABCDEFG1234556

- testString6 ------------------------
   ABCD		EFG
     56

'놀기 > Qt' 카테고리의 다른 글

[QT] 드라이브 목록 출력하기 (QStorageInfo)  (0) 2023.04.05
[QT] Json array 읽기  (0) 2023.03.04
Qt에서 cppcheck 사용하기  (0) 2022.12.31
Qt Console Application 종료하기  (0) 2022.12.30
Qt QLabel로 Drag & Drop Widget 만들기  (0) 2022.10.11

댓글