이 페이지에서

C++ 빠른 수정

Clang 코드 모델을 사용하여 C++ 파일을 구문 분석하는 경우 Edit 모드에서 Clang 수정 힌트를 얻을 수 있습니다. 빠른 수정을 활성화하는 표준 방법을 사용하거나 코드 에디터 왼쪽 여백의 컨텍스트 메뉴에서 한 줄에 적용할 수 있는 수정을 선택합니다.

다음 유형의 빠른 수정을 C++ 코드에 적용하세요:

  • 이진 피연산자 변경
  • if 및 while 조건 단순화(예: if 조건에서 선언을 밖으로 이동)
  • 문자열 수정(예: 문자열 인코딩을 라틴-1로 설정, 문자열 번역 가능 표시, 기호 이름을 낙타 대소문자로 변환)
  • 변수 선언 만들기
  • 함수 선언 및 정의 만들기

다음 표에는 커서 위치에 따라 C++ 코드에 사용할 수 있는 빠른 수정 기능이 요약되어 있습니다.

선택한 코드 블록

빠른 수정설명
로컬 변수에 할당함수 호출 또는 새 표현식의 반환값을 저장하는 로컬 변수를 추가합니다. 예를 들어, 재작성
QString s;
s.toLatin1();

QString s;
QByteArray latin1 = s.toLatin1();

new Foo;

as

Foo * localFoo = new Foo;

기본적으로 Qt Creator 변수를 만들 때 auto 변수 유형을 사용합니다. 변수에 실제 유형으로 레이블을 지정하려면 환경설정 > C++ > Quick Fixes 을 선택하고 Use type "auto" when creating new variables 을 선택 취소합니다.

함수 호출에도 사용할 수 있습니다.

함수 추출선택한 코드를 새 함수로 이동하고 코드 블록을 새 함수에 대한 호출로 바꿉니다. Extract Function Refactoring 대화 상자에 함수 이름을 입력합니다.
상수를 함수 매개변수로 추출선택한 리터럴과 그 모든 항목을 원래 리터럴을 기본값으로 하는 함수 매개변수 newParameter 로 바꿉니다.

클래스

커서가 클래스 정의 위에 있을 때 다음과 같은 빠른 수정을 사용할 수 있습니다.

빠른 수정설명
include 추가프로젝트 파일에 #include 지시문을 추가하여 클래스를 사용할 수 있도록 합니다.
include 및 프로젝트 종속성 추가프로젝트 파일에 #include 지시어와 패키지 종속성을 추가하여 알 수 없는 Qt 클래스를 사용할 수 있게 합니다.
멤버 함수에 대한 구현 생성모든 멤버 함수에 대한 구현을 한 번에 생성합니다. Member Function Implementations 대화 상자에서 멤버 함수를 인라인으로 생성할지 아니면 클래스 외부에서 생성할지 지정합니다.
생성자 생성클래스의 생성자를 생성합니다.
누락된 Q_PROPERTY 멤버 생성누락된 멤버를 Q_PROPERTY:
  • read 함수
  • write 함수에 누락된 멤버를 추가합니다.
  • onChanged 시그널이 있는 경우, NOTIFY
  • 라는 이름의 데이터 멤버가 있는 경우 m_<propertyName>
베이스 클래스의 가상 함수 삽입클래스 내부 또는 외부 또는 구현 파일(있는 경우)에 선언과 해당 정의를 삽입합니다. 자세한 내용은 가상 함수 삽입하기를 참조하세요.
모든 함수 정의 이동모든 함수 정의를 구현 파일 또는 클래스 외부로 이동합니다. 예를 들어, 다음과 같이 다시 작성합니다.
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 (i > 0)
    --i;

as

while (i > 0) {
    --i;
}

for 루프를 다시 작성합니다.

for (int i = 0; i < 10; ++i)
    func(i);

for (int i = 0; i < 10; ++i) {
     func(i);
}
중괄호 제거단일 문으로 구성된 블록에서 중괄호를 제거합니다.
스위치 문 완성enum 유형의 스위치 문에 가능한 모든 경우를 추가합니다.
선언문을 조건 밖으로 이동선언문을 if 또는 while 조건 밖으로 이동하여 조건을 단순화합니다. 예를 들어 다음을 다시 작성합니다.
if (Type name = foo()) {}

Type name = foo;
if (name) {}
루프 최적화사후 증가 연산자를 사전 증가 연산자로, 사후 감소 연산자를 사전 감소 연산자로 다시 작성합니다. 또한 문자열 또는 숫자 리터럴과 ID 표현식 이외의 다른 표현식을 for 루프 조건에서 해당 이니셜라이저로 이동합니다. 예를 들어
for (int i = 0; i < 3 * 2; i++)

for (int i = 0, total = 3 * 2; i < total; ++i)

함수 선언 또는 정의

빠른 수정설명
정의 추가 ...헤더 파일(클래스 내부 또는 외부) 또는 구현 파일에 함수 선언에 대한 정의 스텁을 삽입합니다. 자유 함수의 경우 함수 선언 뒤 또는 구현 파일에 정의를 삽입합니다. 정규화된 이름은 항상 완전히 확장하는 대신 가능하면 최소화합니다.

예를 들어

Class Foo {
    void bar();
};

as(클래스 내부)

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}
{
    this->bar(42, QString("answer"));
}

as

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_symbolanExampleSymbol 으로, AN_EXAMPLE_SYMBOL 을 다음과 같이 다시 작성합니다. AnExampleSymbol

숫자 리터럴

빠른 수정설명
십진수로 변환정수 리터럴을 10진수 표현으로 변환합니다.
16진수로 변환정수 리터럴을 16진수 표현으로 변환합니다.
옥탈로 변환정수 리터럴을 8진수 표현으로 변환합니다.

연산자

빠른 수정설명연산자
||를 사용하여 조건 다시 쓰기드 모건의 법칙에 따라 표현식을 다시 씁니다. 예를 들어, 다음과 같이 다시 작성합니다.
!a && !b

!(a || b)
&&
연산자를 사용하여 다시 쓰기표현식을 부정하고 역 연산자를 사용하여 다시 작성합니다. 예를 들어
  • a op b

    as

    !(a invop b)
  • (a op b)

    as

    !(a invop b)
  • !(a op b)

    as

    (a invob b)
<=, <, >, >=, == 또는 !=
if 문 분할if 문을 여러 문으로 분할합니다. 예를 들어, 다음과 같이 다시 작성합니다.
if (something && something_else) {
}

as

if (something) {
   if (something_else) {
   }
}

if (something || something_else)
    x;

if (something)
    x;
else if (something_else)
    x;
&& 또는 ||
피연산자 바꾸기역 연산자를 사용하여 식을 역순으로 다시 작성합니다. 예를 들어, 다음과 같이 다시 작성합니다.
a op b

b flipop a
<=, <, >, >=, ==, !=, && 또는 ||

문자열 리터럴

빠른 수정설명
연산자 추가문자열 리터럴 연산자(QByteArrayLiteral, QLatin1Char, QLatin1String, 또는 QStringLiteral)를 "_ba" 또는 "_L1" 와 같은 문자열 리터럴에 추가합니다.
문자 리터럴로 변환일부 특수한 경우를 제외하고 단일 문자 문자열 리터럴을 문자 리터럴로 변환합니다. 예를 들면 다음과 같습니다,
"a"
"'"
"\n"
"\""

은 다음과 같이 변환됩니다.

'a'
'\''
'\n'
'"'
Objective-C 문자열 리터럴로 변환파일 형식이 Objective-C(++)인 경우 문자열 리터럴을 Objective-C 문자열 리터럴로 변환합니다. 예를 들어 다음 문자열을 다시 작성합니다.
"abcd"
QLatin1String("abcd")
QLatin1Literal("abcd")

as

@"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은 foo()

양수인
프로젝트 종속성 추가프로젝트 파일에 누락된 포함된 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.