Na ovoj stranici

Brze ispravke za C++

Ako koristite Clang model koda za analizu C++ datoteka, dobit ćete Clangove prijedloge ispravaka u načinu Edit. Koristite standardne načine aktiviranja brzih ispravaka ili odaberite primjenjive ispravke na liniji u kontekstualnom izborniku u lijevoj margini uređivača koda.

Primijenite sljedeće vrste brzih ispravaka na C++ kod:

  • Promijeni binarne operande
  • Pojednostavnite uvjete if i while (na primjer, premjestite deklaracije iz uvjeta if)
  • Mijenjajte nizove (na primjer, postavite kodiranje niza na Latin-1, označite nizove kao prijevodive i pretvorite nazive simbola u camel case)
  • Izradite deklaracije varijabli
  • Izradite deklaracije i definicije funkcija

Sljedeće tablice sažimaju dostupne brze popravke za C++ kod, ovisno o položaju kursora.

Odabran blok koda

Brzo rješenjeOpis
Pridijeli lokalnoj varijabliDodaje lokalnu varijabilu koja pohranjuje vrijednost povrata poziva funkcije ili novi izraz. Na primjer, prepisuje
QString s;
s.toLatin1();

kao

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

i

new Foo;

kao

Foo * localFoo = new Foo;

Po zadanome, Qt Creator koristi tip varijable auto pri stvaranju varijable. Da biste označili varijablu njezinim stvarnim tipom, odaberite Postavke > C++ > Quick Fixes i uklonite kvačicu za Use type "auto" when creating new variables.

Također dostupno za poziv funkcije.

Izvuci funkcijuPremješta odabrani kod u novu funkciju i zamjenjuje blok koda pozivom nove funkcije. U dijaloškom okviru Extract Function Refactoring unesite naziv za funkciju.
Izvuci konstantu kao parametar funkcijeZamjenjuje odabrani literal i sve njegove pojave parametrom funkcije newParameter, koji ima izvorni literal kao zadanu vrijednost.

Klasa

Sljedeće brze ispravke dostupne su kada je pokazivač na definiciji klase.

Brzo ispravljanjeOpis
Dodaj #includeDodaje direktivu #include u datoteku projekta kako bi klasa bila dostupna.
Dodaj #include i ovisnost o projektuDodaje direktivu #include i ovisnost o paketu u datoteku projekta kako bi nepoznata Qt klasa bila dostupna.
Izrada implementacija za članiceStvara implementacije za sve članove funkcija odjednom. U dijalogu Member Function Implementations odredite hoće li se članovi funkcija generirati inlinem ili izvan klase.
Generiraj konstruktorStvara konstruktor za klasu.
Q_PROPERTY Generiraj nedostajuće članove konstruktoruQ_PROPERTYDodaje nedostajuće članove klasi:
  • read funkcija
  • write funkcija, ako postoji WRITE
  • onChanged signal, ako postoji NOTIFY
  • član podataka s imenom m_<propertyName>
Umetanje virtualnih funkcija baznih klasaUmetne deklaracije i odgovarajuće definicije unutar ili izvan klase ili u datoteku implementacije (ako postoji). Za više informacija pogledajte Umetanje virtualnih funkcija.
Premjesti sve definicije funkcijaPremješta sve definicije funkcija u datoteku s implementacijom ili izvan klase. Na primjer, prepisuje
class Foo
{
  void bar()
  {
      // do stuff here
  }
  void baz()
  {
      // do stuff here
  }
};

kao

class Foo
{
  void bar();
  void baz();
};

void Foo::bar() {
    // do stuff here
}

void Foo::baz() {
    // do stuff here
}
Premjesti klasu u namjenski skup izvornih datotekaPremješta klasu u zasebne zaglavne i izvorne datoteke. Za više informacija pogledajte Premještanje klasa u zasebne datoteke.
Prelagranje definicija članovskih funkcija prema redoslijedu deklaracijaPrelagava definicije metoda u datoteci s klasom ( .cpp ) kako bi slijedile redoslijed deklaracija metoda u odgovarajućoj datoteci s glavarom ( .h ).

Član klase

Sljedeće brze ispravke dostupne su kada je pokazivač na članovoj varijabli u definiciji klase.

Brzo ispravljanjeOpis
Generiraj konstantni Q_PROPERTY i dodaj nedostajuće članoveGenerira konstantu Q_PROPERTY i dodaje joj nedostajuće članove.
Generiraj getterStvara getter metodu za člansku varijablu.
Generiraj getter i setterStvara getter i setter članove za člansku varijablu.
Stvaranje getter i setter članovskih funkcijaStvara ili obje funkcije člana za dohvat i postavljanje vrijednosti članovih varijabli, ili samo jednu od njih.
Generiraj Q_PROPERTY i dodaj nedostajuće članoveQ_PROPERTY Generira getter i setter i dodaje im nedostajuće članove.
Generiraj Q_PROPERTY i nedostajuće članove s funkcijom resetiranjaGenerira Q_PROPERTY i dodaje nedostajuće članove, uz dodatnu funkciju reset.
Generiraj setterStvara setter funkciju člana za varijablu člana.

Upravljačka izjava

Brzo ispravljanjeOpis
Dodaj zakrivljene zagradeDodaje kose zagrade u if klauzulu ili u do, while ili for petlju. Na primjer, prepisuje if klauzulu
if (a)
    b;
else
    c;

kao

if (a) {
    b;
} else {
    c;
}

Prepisuje do petlju

do
    ++i;
while (i < 10);

kao

do {
    ++i;
} while (i < 10);

Ponovno pisanje while petlje

while (i > 0)
    --i;

kao

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

Ponovno pisanje for petlje

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

kao

for (int i = 0; i < 10; ++i) {
     func(i);
}
Ukloni zavojne zagradeUklanja zakačene zagrade iz bloka koji se sastoji od jedne izjave.
Dovrši switch izrazDodaje sve moguće slučajeve u switch izraz tipa enum.
Premjesti deklaraciju iz uvjetaPremješta deklaraciju iz uvjeta if ili while kako bi pojednostavio uvjet. Na primjer, prepisuje
if (Type name = foo()) {}

kao

Type name = foo;
if (name) {}
Optimizacija for petljePrepisuje post-inkrement operatore u pre-inkrement operatore, a post-dekrement operatore u pre-dekrement operatore. Također premješta sve osim string ili numeričkih literalnih vrijednosti i izraza za identifikatore iz uvjeta petlje for u njezinu inicijalizaciju. Na primjer, prepisuje
for (int i = 0; i < 3 * 2; i++)

kao

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

Deklaracija ili definicija funkcije

Brzo rješenjeOpis
Dodaj definiciju ...Umetanje skice definicije za deklaraciju funkcije u glavi (header) datoteci (unutar ili izvan klase) ili u implementacijskoj datoteci. Za slobodne funkcije, definicija se umeće nakon deklaracije funkcije ili u implementacijskoj datoteci. Kvalificirani nazivi se, kad god je to moguće, svode na minimum, umjesto da se uvijek potpuno razrađuju.

Na primjer, prepisuje

Class Foo {
    void bar();
};

kao (unutar klase)

Class Foo {
    void bar() {

    }
};

as (izvan klase)

Class Foo {
    void bar();
};

void Foo::bar()
{

}

as (u implementacijskoj datoteci)

// Header file
Class Foo {
    void bar();
};

// Implementation file
void Foo::bar()
{

}
Dodaj deklaraciju xml-ph-0000@deepl.internal
Dodaj deklaraciju funkcije Function Umetne deklaraciju članove funkcije koja odgovara definiciji članove funkcije u deklaraciju klase. Funkcija može biti public, protected, private, public slot, protected slot ili private slot.
Primijeni promjeneOdržava deklaracije i definicije funkcija sinkroniziranima provjerom odgovarajuće deklaracije ili definicije prilikom uređivanja potpisa funkcije te primjenom promjena na odgovarajući kod.

Kada je ova ispravka dostupna, pojavljuje se ikona žaruljice: Ikona žarulje

Konvertirajte poziv funkcije u poziv Qt meta-metodePretvara poziv pozivive funkcije u poziv metoode. Ovo se odnosi na signale i slotove općenito, kao i na funkcije izričito označene s Q_INVOKABLE. Na primjer, za sljedeću klasu:
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);
};

prepisuje

Foo::Foo(QObject *parent)
    : QObject{parent}
{
    this->bar(42, QString("answer"));
}

kao

Foo::Foo(QObject *parent)
    : QObject{parent}
{
    QMetaObject::invokeMethod(this, "bar", Q_ARG(int, 42), Q_ARG(QString, QString("answer")));
}

Brzo rješenje također radi na pozivnim metodama izvan klase koje su vidljive s mjesta s kojeg se pozivaju. Na primjer, ono prepisuje

Foo f;
f.pubBar(123);

kao

Foo f;
QMetaObject::invokeMethod(&f, "pubBar", Q_ARG(int, 123));
Pomaknite definiciju ovdjePremješta postojeću definiciju funkcije na mjesto njezine deklaracije.
Premjesti definiciju funkcijePremješta definiciju funkcije u datoteku s implementacijom, izvan klase ili natrag na njezinu deklaraciju. Na primjer, prepisuje
class Foo
{
  void bar()
  {
      // do stuff here
  }
};

kao

class Foo
{
  void bar();
};

void Foo::bar() {
    // do stuff here
}
Premjesti dokumentacijski komentar funkcije u deklaraciju/definicijuPremješta dokumentacijski komentar funkcije između njezine deklaracije i definicije.

Identifikator

Brzo ispravljanjeOpis
Dodaje #include za neproglašeni ili unaprijed proglašeni identifikatorDodaje naredbu #include u trenutnu datoteku kako bi definicija simbola bila dostupna.
Dodaj član klaseDodaje deklaraciju člana klase za član koji se inicijalizira ako još nije deklariran. Ako Qt Creator ne može automatski prepoznati tip podataka člana, morate ga dodati.
Dodaj definicijuUmetne skicu definicije za statičkog član podataka.
Dodaj unaprijednu deklaracijuDodaje prednaprijednu deklaraciju za operaciju neproglašenog identifikatora.
Konverti na Camel CasePretvara naziv simbola u camel case, pri čemu se elementi naziva spajaju bez razdjelnika, a početno slovo svakog elementa je veliko. Na primjer, pretvara an_example_symbol u anExampleSymbol i AN_EXAMPLE_SYMBOL u AnExampleSymbol

Numerčka doslovnica

Brzo ispravljanjeOpis
Konvertiraj u decimalni oblikPretvara cjelobrojni literal u decimalni prikaz
Konvertiraj u heksadecimalniKonvertira cjelobrojni literal u heksadecimalni prikaz
Konvertiraj u oktalnoKonvertira cjelobrojni literal u oktalni prikaz

Operator

Brzo rješenjeOpisOperator
Ponovno napišite uvjet koristeći ||Prepisuje izraz prema De Morganovim zakonima. Na primjer, prepisuje
!a && !b

kao

!(a || b)
Ponovno pisanje uvjeta pomoću ||Ponovno piše izraz prema De Morganovim zakonima. Na primjer, pretvar
&&
Prepisati koristeći operatorPonovno piše izraz negirajući ga i koristeći obrnuti operator. Na primjer, prepisuje
  • a op b

    kao

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

    kao

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

    kao

    (a invob b)
, xml-ph-0000@deepl.internal , xml-ph-0001@deepl.internal , xml-ph-0002@deepl.in
<=, <, >, >=, == ili !=
Raspodjela if naredbeRasplamsava if-naredbu na nekoliko naredbi. Na primjer, prepiše
if (something && something_else) {
}

kao

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

i

if (something || something_else)
    x;

s

if (something)
    x;
else if (something_else)
    x;
&& ili ||
Zamjena operandaPrepisuje izraz u obrnutom redoslijedu koristeći inverzni operator. Na primjer, prepisuje
a op b

kao

b flipop a
<=, <, >, >=, ==, !=, && ili ||

Doslovni niz

Brzo rješenjeOpis
Operator pridavanjaDodaje operator string literalnog doslovnog izraza (QByteArrayLiteral, QLatin1Char, QLatin1String ili QStringLiteral), kao što su "_ba" ili "_L1", na string literalni doslovni izraz.
Konverti u znakovni literalPretvara doslovni niz jednog znaka u doslovni znak, uz neke posebne slučajeve. Na primjer,
"a"
"'"
"\n"
"\""

pretvaraju se u

'a'
'\''
'\n'
'"'
Konverti u Objective-C string literalPretvara string literal u Objective-C string literal ako je tip datoteke Objective-C(++). Na primjer, prepisuje sljedeće nizove
"abcd"
QLatin1String("abcd")
QLatin1Literal("abcd")

kao

@"abcd"
Konverti u string literalPretvara znakovni doslovnik u nizovski doslovnik, uz neke posebne slučajeve. Na primjer,
'a'
'\''
'\n'
'"'

se pretvaraju u

"a"
"'"
"\n"
"\""
Okružite znakovnim nizanom QByteArrayLiteral()Pretvara niz znakova u niz bajtova. Na primjer, prepisuje
"abcd"

kao

QByteArrayLiteral("abcd")
Ograničite u QLatin1Char()Postavlja kodiranje znaka na Latin-1, osim ako je znak već obuhvaćen u QLatin1Char, QT_TRANSLATE_NOOP, tr, trUtf8, QLatin1Literal ili QLatin1String. Na primjer, prepisuje
'a'

kao

QLatin1Char('a')
Ograniči u QLatin1String()Postavlja kodiranje niza na Latin-1, osim ako je niz već obuhvaćen QLatin1Char, QT_TRANSLATE_NOOP, tr, trUtf8, QLatin1Literal ili QLatin1String. Na primjer, prepisuje
"abcd"

kao

QLatin1String("abcd")
Pobjegni iz string literal kao UTF-8Pretvara ne-ASCII znakove u doslovnom nizu u heksadecimalne bijeg-sekvence. Doslovni nizovi se obrađuju kao UTF-8.
Označi kao prevodivoOznačava niz kao prevodiv. Na primjer, prepiše "abcd" jednim od sljedećih načina, ovisno o tome koji je dostupan:
tr("abcd")
QCoreApplication::translate("CONTEXT", "abcd")
QT_TRANSLATE_NOOP("GLOBAL", "abcd")
Deeskapiranje nizovog doslovnog izraza kao UTF-8Deeskapira ne-ASCII znakove u nizovom doslovnom izra
Deeskapiranje nizovog doslovnog izraza kao UTF-8Dešifriranje oktalnih ili heksadecimalnih bijega u doslovnom nizu. Doslovni nizovi se obrađuju kao UTF-8.

using direktiva

Brzo rješenjeOpis
Uklonite sve pojave using namespace u globalnom opsegu i prilagodite nazive tipova u skladu s timUklonite sve pojave using namespace u globalnom opsegu i prilagodite nazive tipova u skladu s tim.
Uklonite using namespace i prilagodite nazive tipova u skladu s timUklonite pojave using namespace u lokalnom opsegu i prilagodite nazive tipova u skladu s tim.

Razno

Brzo ispravljanjeOpisAktivacija
Dodaj lokalnu deklaracijuDodaje tip dodijeljenika, ako je tip desne strane dodjele poznat. Na primjer, prepisuje
a = foo();

kao

Type a = foo();
gdje je Tip tip povrata

gdje je Tip povratni tip od foo()

Dodijeljeni korisnik
Dodaj projektnu ovisnostDodaje nedostajuću ovisnost paketa za nedostajuću uključenu Qt datoteku u datoteku projekta.#include izjave za Qt klase
Konvertiraj connect() u stil Qt 5Konvertira Qt 4 QObject::connect() u stil Qt 5.QObject::connect() (stil Qt 4)
Konvertirajte komentar u stil C/C++Pretvara komentare u stilu C-a u komentare u stilu C++-a i obrnuto. Pokušava sačuvati lijep raspored i uzima u obzir formatiranje Doxygena i qdoc-a, ali ćete možda morati dotjerati rezultate.Komentari koda
Konverzija u pokazivačKonvertira odabranu varijablu stoga u pokazivač. Na primjer, prepisuje
QByteArray foo = "foo";
foo.append("bar");

kao

QByteArray *foo = new QByteArray("foo");
foo->append("bar");

Ova operacija je ograničena na rad unutar opsega funkcije. Također, stil kodiranja za pokazivače i reference još nije poštovan.

Stakovna varijabla
Konverti na varijablu na hrpiKonvertira odabrani pokazivač u varijablu na hrpi. Na primjer, prepisuje
QByteArray *foo = new QByteArray("foo");
foo->append("bar");

kao

QByteArray foo("foo");
foo.append("bar");

Ova operacija je ograničena na rad unutar opsega funkcije. Također, stil kodiranja za pokazivače i reference još nije poštovan.

Pokazivačka varijabla
Reformatiranje pokazivača ili referenciReformatira deklaracije s pokazivačima ili referencama prema postavkama stila kodiranja za trenutni projekt. Ako nijedan projekt nije otvoren, koriste se trenutačne globalne postavke stila kodiranja.

Na primjer, prepisuje

char*s;

kao

char *s;

Kada se primijeni na odabire, sve odgovarajuće deklaracije u odabiru se prepisuju.

Deklaracije s pokazivačima ili referencama i selekcije koje sadrže takve deklaracije
Podjela deklaracijeRaspodijeli jednostavnu deklaraciju na nekoliko deklaracija. Na primjer, prepisuje
int *a, b;

kao

int *a;
int b;
Naziv tipa ili naziv varijable
Prebacivanje pomoću sljedećeg/prethodnog parametraPomakne parametar za jednu poziciju prema dolje ili gore u popisu parametara.Parametar u deklaraciji ili definiciji funkcije

Vidi također Primijeni brza ispravljanja, Pronađi simbole, Preimenuj simbole, Postavi postavke za brza ispravljanja, QML Quick Fixes i Brza ispravljanja.

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.