C++ 빠른 수정
Clang 코드 모델을 사용하여 C++ 파일을 파싱하면, ‘ Edit ’ 모드에서 Clang 수정 제안이 표시됩니다. 표준적인 방법으로 빠른 수정 기능을 활성화하거나, 코드 편집기 왼쪽 여백의 컨텍스트 메뉴에서 해당 줄에 적용 가능한 수정 항목을 선택하십시오.
C++ 코드에 다음과 같은 유형의 빠른 수정 기능을 적용할 수 있습니다:
- 이항 연산자 변경
- if 및 while 조건 단순화(예: if 조건문 밖으로 선언문 이동)
- 문자열 수정 (예: 문자열 인코딩을 Latin-1로 설정, 문자열을 번역 가능으로 표시, 심볼 이름을 카멜 케이스로 변환)
- 변수 선언 생성
- 함수 선언 및 정의 생성
다음 표는 커서 위치에 따라 C++ 코드에 사용할 수 있는 빠른 수정 기능을 요약한 것입니다.
선택된 코드 블록
| 빠른 수정 | 설명 |
|---|---|
| 로컬 변수에 할당 | 함수 호출 또는 new 표현식의 반환 값을 저장하는 지역 변수를 추가합니다. 예를 들어, 다음을 다음과 같이 재작성합니다.QString s; s.toLatin1(); 를 다음과 같이 QString s; QByteArray latin1 = s.toLatin1(); 로 다시 작성하며, new Foo;그리고 Foo * localFoo = new Foo; 기본적으로 ‘ Qt Creator ’는 변수를 생성할 때 ‘ 함수 호출 시에도 사용할 수 있습니다. |
| 함수 추출 | 선택한 코드를 새로운 함수로 이동하고, 해당 코드 블록을 새로운 함수 호출로 대체합니다. ‘ Extract Function Refactoring ’ 대화 상자에서 함수 이름을 입력하십시오. |
| 상수를 함수 매개변수로 추출 | 선택한 리터럴과 그 모든 출현 위치를 함수 매개변수 ` newParameter`로 대체하며, 이 매개변수의 기본값은 원래 리터럴입니다. |
클래스
커서가 클래스 정의 위에 있을 때 다음과 같은 빠른 수정 기능을 사용할 수 있습니다.
| 빠른 수정 | 설명 |
|---|---|
| #include 추가 | #include 지시어를 프로젝트 파일에 추가하여 클래스를 사용할 수 있게 합니다. |
| #include 및 프로젝트 종속성 추가 | 알 수 없는 Qt 클래스를 사용할 수 있도록 프로젝트 파일에 #include 지시문과 패키지 종속성을 추가합니다. |
| 정의 추가 | 전방 선언을 기반으로 빈 클래스 또는 구조체 정의를 생성합니다. |
| 멤버 함수 구현 생성 | 모든 멤버 함수에 대한 구현을 한 번에 생성합니다. ‘ Member Function Implementations ’ 대화 상자에서 멤버 함수를 인라인으로 생성할지, 아니면 클래스 외부에서 생성할지 지정합니다. |
| 생성자 생성 | 클래스에 대한 생성자를 생성합니다. |
| Q_PROPERTY 의 누락된 멤버 생성 | Q_PROPERTY 에 누락된 멤버를 추가합니다:
|
| 기초 클래스의 가상 함수 삽입 | 클래스 내부 또는 외부, 혹은 구현 파일(존재하는 경우)에 선언과 해당 정의를 삽입합니다. 자세한 내용은 가상 함수 삽입을 참조하십시오. |
| 모든 함수 정의 이동 | 모든 함수 정의를 구현 파일로 또는 클래스 외부로 이동합니다. 예를 들어, 다음을 다시 작성합니다.class Foo { void bar() { // do stuff here } void baz() { // do stuff here } }; 다음과 같이 class Foo { void bar(); void baz(); }; void Foo::bar() { // do stuff here } void Foo::baz() { // do stuff here } |
| 클래스를 별도의 소스 파일 세트로 이동 | 클래스를 별도의 헤더 파일과 소스 파일로 이동합니다. 자세한 내용은 ‘클래스를 별도의 파일로 이동’을 참조하십시오. |
| 선언 순서에 따라 멤버 함수 정의 재정렬 | .cpp 파일 내의 메서드 정의 순서를, 해당 .h 파일의 메서드 선언 순서에 맞춰 재정렬합니다. |
클래스 멤버
클래스 정의에서 멤버 변수에 커서가 위치해 있을 때 다음과 같은 빠른 수정 기능을 사용할 수 있습니다.
| 빠른 수정 | 설명 |
|---|---|
| 상수 Q_PROPERTY 생성 및 누락된 멤버 추가 | Q_PROPERTY 상수를 생성하고 누락된 멤버를 추가합니다. |
| 게터 생성 | 멤버 변수에 대한 게터 멤버 함수를 생성합니다. |
| 게터 및 세터 생성 | 멤버 변수에 대한 게터 및 세터 멤버 함수를 생성합니다. |
| 게터 및 세터 멤버 함수 생성 | 멤버 변수에 대한 게터 및 세터 멤버 함수를 모두 생성하거나, 게터 또는 세터 중 하나만 생성합니다. |
| Q_PROPERTY 및 누락된 멤버 생성 | Q_PROPERTY 를 생성하고 누락된 멤버를 추가합니다. |
| Q_PROPERTY 및 누락된 멤버 생성 (리셋 함수 포함) | Q_PROPERTY 를 생성하고 누락된 멤버를 추가하며, 추가로 reset 함수를 포함합니다. |
| 세터 생성 | 멤버 변수에 대한 세터 멤버 함수를 생성합니다. |
제어 문
| 빠른 수정 | 설명 |
|---|---|
| 중괄호 추가 | if 절이나 do, while, for 루프에 중괄호를 추가합니다. 예를 들어, if 절을 다음과 같이 다시 작성합니다.if (a) b; else c; 다음과 같이 if (a) { b; } else { c; } do 루프를 다음과 같이 다시 작성합니다 do ++i; while (i < 10); 다음과 같이 do { ++i; } while (i < 10); while 루프를 재작성합니다 while (i > 0) --i; 다음과 같이 while (i > 0) { --i; } for 루프를 재작성합니다 for (int i = 0; i < 10; ++i) func(i); 다음과 같이 for (int i = 0; i < 10; ++i) { func(i); } |
| 중괄호 제거 | 단일 문장으로 구성된 블록에서 중괄호를 제거합니다. |
| switch 문 완성 | enum 형식의 switch 문에 가능한 모든 케이스를 추가합니다. |
| 조건문 밖으로 선언 이동 | if 또는 while 조건문에서 선언을 분리하여 조건을 단순화합니다. 예를 들어, 다음을 다음과 같이 다시 작성합니다.if (Type name = foo()) {} 다음과 같이 Type name = foo; if (name) {} |
| for-루프 최적화 | 포스트 인크리먼트 연산자를 프리 인크리먼트 연산자로, 포스트 디크리먼트 연산자를 프리 디크리먼트 연산자로 재작성합니다. 또한 문자열이나 숫자 리터럴 및 id 표현식이 아닌 요소들을 for 루프의 조건식에서 초기화식으로 이동시킵니다. 예를 들어, 다음과 같이 재작성합니다.for (int i = 0; i < 3 * 2; i++) 다음과 같이 for (int i = 0, total = 3 * 2; i < total; ++i) |
함수 선언 또는 정의
| 빠른 수정 | 설명 |
|---|---|
| 정의 추가... | 헤더 파일(클래스 내부 또는 외부)이나 구현 파일에 함수 선언에 대한 정의 스텁을 삽입합니다. 자유 함수의 경우, 함수 선언 뒤나 구현 파일에 정의를 삽입합니다. 자격명이 있는 이름은 항상 완전히 확장되는 대신, 가능한 경우 최소화됩니다. 예를 들어, 다음을 다음과 같이 재작성합니다. Class Foo {
void bar();
};다음과 같이 (클래스 내부) Class Foo {
void bar() {
}
};as (클래스 외부) Class Foo {
void bar();
};
void Foo::bar()
{
}as (구현 파일 내) // Header file Class Foo { void bar(); }; // Implementation file void Foo::bar() { } |
Function 선언 추가 | 멤버 함수 정의와 일치하는 멤버 함수 선언을 클래스 선언에 삽입합니다. 함수는 public, protected, private, public slot, protected slot 또는 private slot 일 수 있습니다. |
| 변경 사항 적용 | 함수 시그니처를 편집할 때 일치하는 선언이나 정의를 확인하고, 해당 변경 사항을 일치하는 코드에 적용하여 함수 선언과 정의를 동기화 상태로 유지합니다. 이 수정 기능이 사용 가능한 경우, 전구 아이콘이 표시됩니다: |
| 함수 호출을 Qt 메타 메서드 호출로 변환 | 호출 가능한 함수 호출을 메타 메서드 호출로 변환합니다. 이는 일반적으로 시그널과 슬롯은 물론, ` Q_INVOKABLE`로 명시적으로 표시된 함수에도 적용됩니다. 예를 들어, 다음 클래스의 경우:class Foo : public QObject { Q_OBJECT public: explicit Foo(QObject *parent = nullptr); Q_SLOT void pubBar(int i); private: Q_INVOKABLE void bar(int i, const QString &c); }; 재작성 다음과 같이 Foo::Foo(QObject *parent) : QObject{parent} { QMetaObject::invokeMethod(this, "bar", Q_ARG(int, 42), Q_ARG(QString, QString("answer"))); } 이 빠른 해결 방법은 호출되는 위치에서 볼 수 있는 클래스 외부의 호출 가능한 메서드에도 적용됩니다. 예를 들어, 다음을 재작성합니다. Foo f; f.pubBar(123); 다음과 같이 Foo f; QMetaObject::invokeMethod(&f, "pubBar", Q_ARG(int, 123)); |
| 정의 위치 이동 | 기존 함수 정의를 해당 선언 위치로 이동합니다. |
| 함수 정의 이동 | 함수 정의를 구현 파일로, 클래스 외부로, 또는 선언 위치로 다시 이동합니다. 예를 들어, 다음을 재작성합니다.class Foo { void bar() { // do stuff here } }; 다음과 같이 class Foo { void bar(); }; void Foo::bar() { // do stuff here } |
| 함수 설명문을 선언/정의로 이동 | 함수의 문서 주석을 선언과 정의 사이로 이동합니다. |
식별자
| 빠른 수정 | 설명 |
|---|---|
| 선언되지 않았거나 선선언된 식별자에 대해 #include 추가 | 기호 정의를 사용할 수 있도록 현재 파일에 ` #include ` 지시문을 추가합니다. |
| 클래스 멤버 추가 | 아직 선언되지 않은 클래스 멤버가 초기화되고 있는 경우, 해당 멤버에 대한 선언을 추가합니다. Qt Creator 가 멤버의 데이터형을 자동으로 감지할 수 없는 경우, 사용자가 직접 추가해야 합니다. |
| 정의 추가 | 정적 데이터 멤버에 대한 정의 스텁을 삽입합니다. |
| 전방 선언 추가 | 선언되지 않은 식별자에 대한 선선언을 추가합니다. |
| 카멜 케이스로 변환 | 심볼 이름을 카멜 케이스로 변환합니다. 이때 이름의 각 요소는 구분 기호 없이 연결되며, 각 요소의 첫 글자는 대문자로 표기됩니다. 예를 들어, an_example_symbol 는 anExampleSymbol 로, AN_EXAMPLE_SYMBOL 는 AnExampleSymbol |
숫자 리터럴
| 빠른 수정 | 설명 |
|---|---|
| 십진수로 변환 | 정수 리터럴을 십진수 표현으로 변환합니다. |
| 16진수로 변환 | 정수 리터럴을 16진수 표기법으로 변환합니다 |
| 8진수 변환 | 정수 리터럴을 8진수 표기법으로 변환합니다 |
연산자
| 빠른 수정 | 설명 | 연산자 |
|---|---|---|
| ||를 사용하여 조건 재작성 | 드 모르간의 법칙에 따라 식을 재작성합니다. 예를 들어, 다음을 재작성합니다.!a && !b 다음과 같이 !(a || b) | && |
| 연산자를 사용하여 다시 쓰기 | 표현식을 부정하고 역 연산자를 사용하여 다시 작성합니다. 예를 들어, 다음을 다시 작성합니다.
| <=, <, >, >=, == 또는 != |
| if 문 분할 | if 문을 여러 문장으로 분할합니다. 예를 들어, 다음을 다음과 같이 다시 작성합니다.if (something && something_else) { } 다음과 같이 if (something) { if (something_else) { } } 로 다시 작성하고 if (something || something_else) x; ~와 함께 if (something) x; else if (something_else) x; | && 또는 || |
| 연산자 교환 | 역 연산자를 사용하여 식을 역순으로 다시 작성합니다. 예를 들어, 다음을 다시 작성합니다.a op b 다음과 같이 b flipop a | <=, <, >, >=, ==, !=, && 또는 || |
문자열 리터럴
| 빠른 수정 | 설명 |
|---|---|
| 추가 연산자 | "_ba" 또는 "_L1" 과 같은 문자열 리터럴 연산자(QByteArrayLiteral, QLatin1Char, QLatin1String 또는 QStringLiteral)를 문자열 리터럴에 추가합니다. |
| 문자 리터럴로 변환 | 일부 특수한 경우를 제외하고, 단일 문자 문자열 리터럴을 문자 리터럴로 변환합니다. 예를 들어,"a" "'" "\n" "\"" 다음과 같이 변환됩니다. 'a' '\'' '\n' '"' |
| Objective-C 문자열 리터럴로 변환 | 파일 유형이 Objective-C(++)인 경우, 문자열 리터럴을 Objective-C 문자열 리터럴로 변환합니다. 예를 들어, 다음 문자열들을 다음과 같이 재작성합니다."abcd" QLatin1String("abcd") QLatin1Literal("abcd") 다음과 같이 @"abcd" |
| 문자열 리터럴로 변환 | 문자 리터럴을 문자열 리터럴로 변환합니다. 단, 몇 가지 특수한 경우가 있습니다. 예를 들어,'a' '\'' '\n' '"' 는 다음과 같이 변환됩니다. "a" "'" "\n" "\"" |
| QByteArrayLiteral()로 감싸기 | 문자열을 바이트 배열로 변환합니다. 예를 들어, 다음을 다시 작성합니다."abcd"다음과 같이 QByteArrayLiteral("abcd") |
| QLatin1Char()로 감싸기 | 해당 문자가 이미 QLatin1Char, QT_TRANSLATE_NOOP, tr, trUtf8, QLatin1Literal 또는 QLatin1String 로 묶여 있지 않은 경우, 해당 문자의 인코딩을 Latin-1로 설정합니다. 예를 들어, 다음을 다시 작성합니다.'a'다음과 같이 QLatin1Char('a') |
| QLatin1String()으로 감싸기 | 문자열이 이미 QLatin1Char, QT_TRANSLATE_NOOP, tr, trUtf8, QLatin1Literal 또는 QLatin1String 로 감싸져 있지 않은 경우, 해당 문자열의 인코딩을 Latin-1로 설정합니다. 예를 들어, 다음을 다시 작성합니다."abcd"다음과 같이 QLatin1String("abcd") |
| UTF-8로 문자열 리터럴 이스케이프 | 문자열 리터럴 내의 비-ASCII 문자를 16진수 이스케이프 시퀀스로 변환합니다. 문자열 리터럴은 UTF-8로 처리됩니다. |
| 번역 가능으로 표시 | 문자열을 번역 가능으로 표시합니다. 예를 들어, "abcd" 을 다음 옵션 중 사용 가능한 옵션으로 재작성합니다:tr("abcd") QCoreApplication::translate("CONTEXT", "abcd") QT_TRANSLATE_NOOP("GLOBAL", "abcd") |
| UTF-8로 문자열 리터럴의 이스케이프 해제 | 문자열 리터럴 내의 8진수 또는 16진수 이스케이프 시퀀스의 이스케이프를 해제합니다. 문자열 리터럴은 UTF-8로 처리됩니다. |
using 지시어
| 빠른 수정 | 설명 |
|---|---|
전역 범위에서 using namespace 의 모든 발생을 제거하고 유형 이름을 적절히 조정하십시오 | 전역 범위에서 using namespace 의 모든 발생을 제거하고, 이에 따라 유형 이름을 조정합니다. |
using namespace 를 제거하고 유형 이름을 적절히 조정하십시오 | 로컬 범위에서 using namespace 의 모든 사용처를 제거하고, 이에 따라 타입 이름을 수정하십시오. |
기타
| 빠른 수정 | 설명 | 활성화 |
|---|---|---|
| 로컬 선언 추가 | 할당식의 우측항의 유형이 알려진 경우, 할당받는 쪽의 유형을 추가합니다. 예를 들어, 다음을 다음과 같이 다시 작성합니다.a = foo();를 Type a = foo();로 다시 작성합니다. 여기서 Type은 | 담당자 |
| 프로젝트 종속성 추가 | 프로젝트 파일에 누락된 Qt 파일의 패키지 종속성을 추가합니다. | Qt 클래스에 대한 #include 문 |
| connect()를 Qt 5 스타일로 변환 | Qt 4의 ` QObject::connect()`을 Qt 5 스타일로 변환합니다. | QObject::connect() (Qt 4 스타일) |
| 주석을 C/C++ 스타일로 변환 | C 스타일 주석을 C++ 스타일 주석으로, 또는 그 반대로 변환합니다. 깔끔한 레이아웃을 유지하려고 노력하며 Doxygen 및 qdoc 서식을 고려하지만, 결과물을 정리해야 할 수도 있습니다. | 코드 주석 |
| 포인터로 변환 | 선택한 스택 변수를 포인터로 변환합니다. 예를 들어, 다음을 다음과 같이 다시 작성합니다.QByteArray foo = "foo"; foo.append("bar"); 다음과 같이 QByteArray *foo = new QByteArray("foo"); foo->append("bar"); 이 연산은 함수 범위 내에서만 작동하도록 제한되어 있습니다. 또한, 포인터와 참조에 대한 코딩 스타일은 아직 지원되지 않습니다. | 스택 변수 |
| 스택 변수로 변환 | 선택한 포인터를 스택 변수로 변환합니다. 예를 들어, 다음을 다음과 같이 다시 작성합니다.QByteArray *foo = new QByteArray("foo"); foo->append("bar"); 다음과 같이 QByteArray foo("foo"); foo.append("bar"); 이 작업은 함수 범위 내에서만 수행됩니다. 또한, 포인터 및 참조에 대한 코딩 스타일은 아직 지원되지 않습니다. | 포인터 변수 |
| 포인터 또는 참조 재서식 | 현재 프로젝트의 코드 스타일 설정에 따라 포인터 또는 참조가 포함된 선언을 재포맷합니다. 열려 있는 프로젝트가 없는 경우, 현재 전역 코드 스타일 설정이 사용됩니다. 예를 들어, 다음을 재작성합니다. char*s; 를 다음과 같이 char *s; 선택 영역에 적용되면, 해당 선택 영역 내의 모든 적합한 선언이 재작성됩니다. | 포인터나 참조가 포함된 선언 및 그러한 선언이 포함된 선택 영역 |
| 선언 분할 | 단순한 선언을 여러 개의 선언으로 분할합니다. 예를 들어, 다음을 재작성합니다.int *a, b; 를 다음과 같이 int *a; int b; | 형식 이름 또는 변수 이름 |
| 다음/이전 매개변수로 전환 | 매개변수 목록에서 매개변수를 한 칸 위나 아래로 이동합니다. | 함수 선언 또는 정의 내의 매개변수 |
참조: 빠른 수정 적용, 심볼 찾기, 심볼 이름 변경, 빠른 수정 설정 지정, QML 빠른 수정 및 빠른 수정.
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
