Brze ispravke za C++
Ako koristite Clang model koda za analizu C++ datoteka, dobit ćete Clang prijedloge za ispravke u načinu rada 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:
- Promjena binarnih operanada
- 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, prema položaju kursora.
Odabran blok koda
| Brzo rješenje | Opis |
|---|---|
| Dodijeli lokalnoj varijabli | Dodaje lokalnu varijabilu koja pohranjuje vrijednost povrata poziva funkcije ili novog izraza. 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. |
| Izvadi funkciju | Premješta odabrani kod u novu funkciju i zamjenjuje blok koda pozivom nove funkcije. U dijalogu Extract Function Refactoring unesite naziv za funkciju. |
| Izvadi 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 kursor na definiciji klase.
| Brzo ispravljanje | Opis |
|---|---|
| Dodaj #include | Dodaje direktivu #include u datoteku projekta kako bi klasa bila dostupna. |
| Dodaj #include i projektnu ovisnost | Dodaje direktivu #include i ovisnost o paketu u datoteku projekta kako bi nepoznata Qt klasa bila dostupna. |
| Dodaj definiciju | Stvara praznu definiciju klase ili strukture iz prednjeg deklariranja. |
| Izrada implementacija za članice | Stvara implementacije za sve članove funkcija odjednom. U dijalogu za generiranje implementacija ( Member Function Implementations ) navedite hoće li se implementacije članova funkcija generirati inlinu ili izvan klase. |
| Generiraj konstruktor | Stvara konstruktor za klasu. |
| Q_PROPERTY Generirajte nedostajuće članove konstruktora | Q_PROPERTYDodaje nedostajuće članove u konstruktor klase:
|
| Umetanje virtualnih funkcija baznih klasa | Umetanje deklaracija i odgovarajućih definicija 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 redu deklaracija | Prelagava definicije metoda u datoteci s ekstenzijom . .cpp kako bi slijedile redoslijed deklaracija metoda u odgovarajućoj datoteci s ekstenzijom . .h. |
Član klase
Sljedeće brze ispravke dostupne su kada je pokazivač na članovskoj 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 funkciju člana za varijablu člana. |
| Generiraj getter i setter | Stvara getter i setter članove za člansku varijablu. |
| Kreiranje getter i setter članovskih funkcija | Stvara ili obje funkcije člana za dohvat i postavljanje varijabli člana, 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 kose 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 izvan 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 prazne definicije za deklaraciju funkcije u glavačku datoteku (unutar ili izvan klase) ili u datoteku implementacije. Za slobodne funkcije, definicija se umeće nakon deklaracije funkcije ili u datoteku implementacije. Kvalificirana imena se, kad god je to moguće, svode na minimum umjesto da budu uvijek u potpunosti razrađena. 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 datoteci implementacije) // Header file Class Foo { void bar(); }; // Implementation file void Foo::bar() { } |
Function Dodaj deklaraciju funkcije člana | Umetne deklaraciju članske funkcije koja odgovara definiciji članske 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 žarulje: |
| 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 prepiše Foo f; f.pubBar(123); kao Foo f; QMetaObject::invokeMethod(&f, "pubBar", Q_ARG(int, 123)); |
| Pomaknite definiciju ovdje | Premješta definiciju postojeće funkcije na njezinu deklaraciju. |
| 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
| Brza ispravka | Opis |
|---|---|
| Dodaje #include za neproglašeni ili unaprijed proglašeni identifikator | Dodaje direktivu #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 skraćenu definiciju statičkog člana podataka. |
| Dodaj unaprijednu deklaraciju | Dodaje prednaprijednu deklaraciju za operaciju neproglašenog identifikatora. |
| Konvertiraj u Camel Case | Pretvara naziv simbola u camel case, pri čemu se elementi naziva spajaju bez razdjelnika, a početno slovo svakog elementa pisano je velikim slovom. Na primjer, pretvara an_example_symbol u anExampleSymbol i AN_EXAMPLE_SYMBOL u AnExampleSymbol |
Numerički literal
| Brza ispravka | Opis |
|---|---|
| Konvertiraj u decimalni | Konvertira numerički literal u decimalni prikaz |
| Konverti na heksadecimalni | Konvertira cjelobrojni literal u heksadecimalni prikaz |
| Konvertiraj u oktal | 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) | && |
| Prepisivanje pomoću operatora | Prepisuje izraz negirajući ga i koristeći inverzni operator. Na primjer, prepisuje
| <=, <, >, >=, == ili != |
| Raspodjela if naredbe | Rasparčava if-naredbu na nekoliko naredbi. Na primjer, prepišeif (something && something_else) { } kao if (something) { if (something_else) { } } i if (something || something_else) x; i if (something) x; else if (something_else) x; | && ili || |
| Zamjena operanada | 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 doslovnog niza (QByteArrayLiteral, QLatin1Char, QLatin1String ili QStringLiteral), kao što su "_ba" ili "_L1", na doslovni niz. |
| Konverti u znakovni literal | Pretvara string literal s jednim znakom u karakterni literal, 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, prepiše sljedeće nizove"abcd" QLatin1String("abcd") QLatin1Literal("abcd") kao @"abcd" |
| Konverti u string literal | Pretvara znakovni literal u string literal, uz neke posebne slučajeve. Na primjer,'a' '\'' '\n' '"' se pretvaraju u "a" "'" "\n" "\"" |
| Okružite znakovnim nizanom QByteArrayLiteral() | Konvertira niz znakova u niz bajtova. Na primjer, prepisuje"abcd"kao QByteArrayLiteral("abcd") |
| Obavijte 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') |
| Obavije u QLatin1String() | Postavlja kodiranje niza na Latin-1, osim ako je niz već obavijen u QLatin1Char, QT_TRANSLATE_NOOP, tr, trUtf8, QLatin1Literal ili QLatin1String. Na primjer, prepisuje"abcd"kao QLatin1String("abcd") |
| Pobjegni od doslovnog niza 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 doslovnog niza kao UTF-8 | Deeskapira oktalne ili heksadecimalne escape sekvence u string literalima. String literali 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 tip povrata | Dodijeljeni korisnik |
| Dodaj ovisnost projekta | 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() (Qt 4 stil) |
| 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 možda ćete 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 |
| Konvertiraj u 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. | Varijabla pokazivača |
| 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 | Rasparčava jednostavnu deklaraciju na nekoliko deklaracija. Na primjer, prepisujeint *a, b; kao int *a; int b; | Naziv tipa ili naziv varijable |
| Prebacivanje 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 brza ispravljanja 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.
