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šenje | Opis |
|---|---|
| Pridijeli lokalnoj varijabli | Dodaje lokalnu varijabilu koja pohranjuje vrijednost povrata poziva funkcije ili novi izraz. Na primjer, prepisujeQString 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 Također dostupno za poziv funkcije. |
| Izvuci funkciju | Premješ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 funkcije | Zamjenjuje 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 ispravljanje | Opis |
|---|---|
| Dodaj #include | Dodaje direktivu #include u datoteku projekta kako bi klasa bila dostupna. |
| Dodaj #include i ovisnost o projektu | Dodaje direktivu #include i ovisnost o paketu u datoteku projekta kako bi nepoznata Qt klasa bila dostupna. |
| Izrada implementacija za članice | Stvara implementacije za sve članove funkcija odjednom. U dijalogu Member Function Implementations odredite hoće li se članovi funkcija generirati inlinem ili izvan klase. |
| Generiraj konstruktor | Stvara konstruktor za klasu. |
| Q_PROPERTY Generiraj nedostajuće članove konstruktoru | Q_PROPERTYDodaje nedostajuće članove klasi:
|
| Umetanje virtualnih funkcija baznih klasa | Umetne 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 funkcija | Premješta sve definicije funkcija u datoteku s implementacijom ili izvan klase. Na primjer, prepisujeclass 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 datoteka | Premješ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 deklaracija | Prelagava 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 ispravljanje | Opis |
|---|---|
| Generiraj konstantni Q_PROPERTY i dodaj nedostajuće članove | Generira konstantu Q_PROPERTY i dodaje joj nedostajuće članove. |
| Generiraj getter | Stvara getter metodu za člansku varijablu. |
| Generiraj getter i setter | Stvara getter i setter članove za člansku varijablu. |
| Stvaranje getter i setter članovskih funkcija | Stvara ili obje funkcije člana za dohvat i postavljanje vrijednosti članovih varijabli, ili samo jednu od njih. |
| Generiraj Q_PROPERTY i dodaj nedostajuće članove | Q_PROPERTY Generira getter i setter i dodaje im nedostajuće članove. |
| Generiraj Q_PROPERTY i nedostajuće članove s funkcijom resetiranja | Generira Q_PROPERTY i dodaje nedostajuće članove, uz dodatnu funkciju reset. |
| Generiraj setter | Stvara setter funkciju člana za varijablu člana. |
Upravljačka izjava
| Brzo ispravljanje | Opis |
|---|---|
| Dodaj zakrivljene zagrade | Dodaje kose zagrade u if klauzulu ili u do, while ili for petlju. Na primjer, prepisuje if klauzuluif (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 zagrade | Uklanja zakačene zagrade iz bloka koji se sastoji od jedne izjave. |
| Dovrši switch izraz | Dodaje sve moguće slučajeve u switch izraz tipa enum. |
| Premjesti deklaraciju iz uvjeta | Premješta deklaraciju iz uvjeta if ili while kako bi pojednostavio uvjet. Na primjer, prepisujeif (Type name = foo()) {} kao Type name = foo; if (name) {} |
| Optimizacija for petlje | Prepisuje 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, prepisujefor (int i = 0; i < 3 * 2; i++) kao for (int i = 0, total = 3 * 2; i < total; ++i) |
Deklaracija ili definicija funkcije
| Brzo rješenje | Opis |
|---|---|
| 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 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 promjene | Održ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: |
| Konvertirajte poziv funkcije u poziv Qt meta-metode | Pretvara 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 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 ovdje | Premješta postojeću definiciju funkcije na mjesto njezine deklaracije. |
| Premjesti definiciju funkcije | Premješta definiciju funkcije u datoteku s implementacijom, izvan klase ili natrag na njezinu deklaraciju. Na primjer, prepisujeclass Foo { void bar() { // do stuff here } }; kao class Foo { void bar(); }; void Foo::bar() { // do stuff here } |
| Premjesti dokumentacijski komentar funkcije u deklaraciju/definiciju | Premješta dokumentacijski komentar funkcije između njezine deklaracije i definicije. |
Identifikator
| Brzo ispravljanje | Opis |
|---|---|
| Dodaje #include za neproglašeni ili unaprijed proglašeni identifikator | Dodaje naredbu #include u trenutnu datoteku kako bi definicija simbola bila dostupna. |
| Dodaj član klase | Dodaje 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 definiciju | Umetne skicu definicije za statičkog član podataka. |
| Dodaj unaprijednu deklaraciju | Dodaje prednaprijednu deklaraciju za operaciju neproglašenog identifikatora. |
| Konverti na Camel Case | Pretvara 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 ispravljanje | Opis |
|---|---|
| Konvertiraj u decimalni oblik | Pretvara cjelobrojni literal u decimalni prikaz |
| Konvertiraj u heksadecimalni | Konvertira cjelobrojni literal u heksadecimalni prikaz |
| Konvertiraj u oktalno | Konvertira cjelobrojni literal u oktalni prikaz |
Operator
| Brzo rješenje | Opis | Operator |
|---|---|---|
| Ponovno napišite uvjet koristeći || | Prepisuje izraz prema De Morganovim zakonima. Na primjer, prepisuje!a && !b kao !(a || b) | && |
| Prepisati koristeći operator | Ponovno piše izraz negirajući ga i koristeći obrnuti operator. Na primjer, prepisuje
| <=, <, >, >=, == ili != |
| Raspodjela if naredbe | Rasplamsava if-naredbu na nekoliko naredbi. Na primjer, prepišeif (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 operanda | Prepisuje izraz u obrnutom redoslijedu koristeći inverzni operator. Na primjer, prepisujea op b kao b flipop a | <=, <, >, >=, ==, !=, && ili || |
Doslovni niz
| Brzo rješenje | Opis |
|---|---|
| Operator pridavanja | Dodaje operator string literalnog doslovnog izraza (QByteArrayLiteral, QLatin1Char, QLatin1String ili QStringLiteral), kao što su "_ba" ili "_L1", na string literalni doslovni izraz. |
| Konverti u znakovni literal | Pretvara 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 literal | Pretvara 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 literal | Pretvara 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-8 | Pretvara ne-ASCII znakove u doslovnom nizu u heksadecimalne bijeg-sekvence. Doslovni nizovi se obrađuju kao UTF-8. |
| Označi kao prevodivo | Označ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-8 | Dešifriranje oktalnih ili heksadecimalnih bijega u doslovnom nizu. Doslovni nizovi se obrađuju kao UTF-8. |
using direktiva
| Brzo rješenje | Opis |
|---|---|
Uklonite sve pojave using namespace u globalnom opsegu i prilagodite nazive tipova u skladu s tim | Uklonite 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 tim | Uklonite pojave using namespace u lokalnom opsegu i prilagodite nazive tipova u skladu s tim. |
Razno
| Brzo ispravljanje | Opis | Aktivacija |
|---|---|---|
| Dodaj lokalnu deklaraciju | Dodaje tip dodijeljenika, ako je tip desne strane dodjele poznat. Na primjer, prepisujea = foo();kao Type a = foo();gdje je Tip povratni tip od | Dodijeljeni korisnik |
| Dodaj projektnu ovisnost | Dodaje nedostajuću ovisnost paketa za nedostajuću uključenu Qt datoteku u datoteku projekta. | #include izjave za Qt klase |
| Konvertiraj connect() u stil Qt 5 | Konvertira 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, prepisujeQByteArray 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 hrpi | Konvertira odabrani pokazivač u varijablu na hrpi. Na primjer, prepisujeQByteArray *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 referenci | Reformatira 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 deklaracije | Raspodijeli jednostavnu deklaraciju na nekoliko deklaracija. Na primjer, prepisujeint *a, b; kao int *a; int b; | Naziv tipa ili naziv varijable |
| Prebacivanje pomoću sljedećeg/prethodnog parametra | Pomakne 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.
