- QString  ⇔  char* 형 변환

  QString 형에서 char* 형 및 반대로 변환하는 과정입니다.

  QString 형에서 char* 형 변환 시에는 const char* 형을 사용해야 합니다.

 

// QString to char*
QString str = "Test";
QByteArray arr = str.toUtf8();

const char* ptr = arr.constData();

// char * to QString
char* ptr = "Test";
QString str = QString(ptr);

 

 

- QString  ⇔  char[] 형 변환

  QString 형에서 char[] 형 및 반대로 변환하는 과정입니다.

  QString 에서 char[] 변환 시에는 const char* 형으로 강제 형 변환 후 sprintf() 혹은 strcpy() 함수를 통해 char 배열에 복사합니다.

 

// QString to char[]
QString str = "Test";
char arr[5];
sprintf(arr,"%s",(const char *)str.toStdString().c_str()); // strcpy(arr, (const char *)str.toStdString().c_str());

// char[] to QString
char arr[5] = "Test";
QString str = QString(arr);

 

 

- 문자열 길이, 사이즈, 카운트

  length(), size(), count() 함수는 문자열의 문자 수를 반환하는 함수입니다.

 

QString str("coding");

int length = str.length();
// length == 6

 

int size = str.size();
// size == 6

 

int count = str.count();
// count == 6

 

 

- 문자열 앞, 뒤에 새로운 문자열 추가

  기존 문자열 앞에 새로운 문자열을 추가할 경우. prepend() 함수를 사용합니다.

  기존 문자열 뒤에 새로운 문자열을 추가할 경우. append() 함수를 사용합니다.

 

QString url = QString("coding-chobo");

url.prepend("https://");

// url == "https://coding-chobo";

 

url.append(".com");

// url == "https://coding-chobo.com";

 

 

- 문자열 Null 과 Empty 체크

  Null은 어떤 값으로도 초기화 되지 않은 상태를 나타냅니다.
  Empty는 초기화의 여부에 관계 없이 현재 QString이 비어있는 상태를 확인할 수 있습니다.


QString address;
bool ret = address.isEmpty();
// ret == true

ret = address.isNull();

// ret == true

address = "";
ret = address.isEmpty();

// ret == true

ret = address.isNull();

// ret == false

 

 

- 특정문자를 기준으로 문자열 자르기

  split() 함수를 사용해 특정 문자를 기준으로 문자열을 분리할 수 있습니다.

 

QString address = "192.168.0.1";

QStringList list = address.split(".");

// list == ("192", "168", "0", "1")

 

 

- 문자열 치환

  char* 형에서 printf("%s", str); 와 같이 문자열을 치환하는 형식을 사용하지만,

  QString 은  QString(%1, %2, %3).arg(str1).arg(str2).arg(str3) 형식을 사용합니다.

 

QString year  = "2020";
QString month = "11";
QString day = "27";

 

QString date = QString("%1. %2. %3").arg(year).arg(month).arg(day);

// date == "2020. 11. 27"

date = "%3. %2. %1";

QString newformat = date.arg(year, month, day);

// newformat == "27. 11. 2020"

 

 

- 특정 인덱스 위치에 있는 문자 반환

  at() 함수는 특정 인덱스의 문자를 반환합니다.

  해당 문자열의 처음 인덱스는 0부터 시작합니다.

 

QString str("coding chobo");
QChar a = str.at(0);
// a == 'c'

QChar b = str.at(3);
// b == 'i'

 

 

- 문자열 첫 문자, 마지막 문자 반환

  front() 함수 사용 시 문자열의 첫 문자를 반환합니다.

  back() 함수 사용 시 문자열의 마지막 문자를 반환합니다.

 

QString str("coding chobo");

a = str.front();

// c == 'c'


QChar a = str.back();

// c == 'o'

 

 

- 문자열 끝에서 부터 입력 수 만큼 제거

  chop() 함수 사용 시 입력한 숫자 만큼 뒤에서 부터 특정 문자열의 문자를 제거합니다.

 

QString filename("test.txt");

filename.chop(3);

// str == "test."

 

 

- 문자열 왼쪽 또는 오른쪽 끝에서 부터 입력 수 만큼 문자열을 반환

  left() 함수 사용 시 왼쪽부터 입력한 숫자 만큼의 문자열을 반환합니다.
  right() 함수 사용 시 오른쪽부터 입력한 숫자 만큼의 문자열을 반환합니다.

 

QString str = "TEST STRING";
QString left = str.left(4);
// left == "TEST"


QString right = str.right(6);

// right == "STRING";

 

 

- 문자열 내용 지우기

  clear() 함수는 현재 QString 변수의 문자열 내용을 지우고 null로 만듭니다.

 

QString text("text");
text.clear();
// text.isNull() == true
// text == ""

 

 

- QString  ⇔  int 변환

  QString 형과 int 형 사이 간 변환하는 방법입니다.

 

QString str = QString::number(1234);
// str == "1234" (10진수)

QString str = QString::number(1234, 2);
// str == "10011010010" (2진수)

QString str = QString::number(1234, 16);
// str == "4d2" (16진수)


int num = str.toInt();
// num == 1234

 

 

- 문자열 특정 문자열 포함 여부(검색)

  contains() 함수를 사용하여 문자열 내에 입력한 문자열이 포함되어 있는지 검색합니다.
  기본적으로 대소문자를 구분하므로 Qt::CaseInsensitive를 통해 대소문자를 구분하지 않고 검색하도록 설정할 수 있습니다.

 

QString str = "This is test string";
bool ret = str.contains("test", Qt::CaseInsensitive); // 대소문자를 구분하지 않도록 한다.
// ret == true

 

 

- 문자열 특정 문자열의 시작 위치(인덱스)

  indexOf() 함수는 입력한 문자열의 시작 위치를 반환해줍니다. 
  입력한 문자열이 존재하지 않을 경우 -1의 값을 반환하고, 대소문자를 구분하지 때문에 Qt::CaseInsensitive를 사용합니다.

 

QString str = "This is test string";
int index = str.indexOf("test", Qt::CaseInsensitive); // 대소문자를 구분하지 않도록 한다.
// index == 8

index = str.indexOf("are", Qt::CaseInsensitive); // 대소문자를 구분하지 않도록 한다.
// index == -1

 

 

- C++ 표준 문자열 QString으로 변환

  C++ 표준 문자열인 string을 QString 형태로 변환하는 방법입니다.

 

QString str("standard");
std::string stdstring = str.toStdString();
QString qstring = QString::fromStdString(stdstring);

 

 

- 특정 문자로 채우기

  QString 변수의 리사이즈 설정 후 해당 변수를 특정 문자로 채우는 방법입니다.

 

QString str;
str.resize(10);
str.fill('#');
// str == "##########"

 

str.fill('*', 5); // string is resized(리사이징됨)
// str == "*****"

 

 

- 특정 위치에 문자열 끼워넣기

  QString 변수의 특정 위치에 문자열을 끼워 넣는 방법입니다.
  맨 앞에 끼워 넣으려면 0번 값을 입력. 특정 위치의 position 값을 입력하시면 됩니다. 

 

QString url = "https://coding-chobo.tistory.com";

 

url.insert(8, QString("www."));

// url = "https://www.coding-chobo.tistory.com"

 

 

- 지정 위치부터 입력 수 만큼 삭제

  QString 변수의 특정 위치의 문자열을 삭제할 수 있습니다.
  remove() 함수에 지울 문자열의 시작 위치, 지우고 싶은 길이 값을 차례로 입력합니다. 

 

QString url = "https://www.coding-chobo.tistory.com";

str.remove(8, 4);
// url = "https://coding-chobo.tistory.com"

 

 

- 문자열 내 대소문자 확인 및 변환

  해당 문자열이 대문자, 소문자로만 이루어져 있는지 isUpper(), isLower() 함수를 통해 확인하고,
  대문자 혹은 소문자로의 변환을 원할 경우 toUpper(), toLower() 함수를 사용할 수 있습니다.

 

// 문자열 대소문자 확인
QString str("coding");

str.isUpper();
// false

str.isLower();
// true

// 문자열 대소문자 변환
QString upper = str.toUpper();
QString lower = str.toLower();
upper.isUpper();
// true

lower.isLower();
// true

 

 

- 특정 위치 문자열 변경

  특정 위치의 문자열을 선택하여 입력한 문자열로 대체합니다.
  replace() 함수에 시작 위치, 대체할 길이를 차례로 입력합니다.

 

QString str("This is apple");
QString repstr("peach");

str.replace(8, 5, repstr);
// str == "This is peach"

 

 

- 문자열 한 섹션(특정 부분)을 반환

  필드는 왼쪽에서부터 0, 1, 2 ... 순서로 번호가 매겨지며, 오른쪽에서 왼쪽으로는 -1, -2 순서로 번호를 매깁니다.

 

QString path = "/home/user/file.txt";

QString fileName = path.section("/", 3);

// fileName == "file.txt"

 

QString location = path.section("/", 2, 3);

// location == "user/file.txt"