Qt Creator domyślnie ma włączone „jakieś” podpowiadanie kodu, które cośtam podpowiada, jednak nie jest ono zbyt dobre. Problem pojawia się, gdy przeciążymy operator[], aby zwracał obiekt z naszego kontenera. Przykład:
// mamy przykładową klasę: class Pixel { public: Pixel(int x, int y, bool isVisible = true) : x(x), y(y), visible(isVisible) {} bool isVisible(){return visible;} void makeVisible() {visible = true;} void makeInvisible() {visible = false;} private: int x; int y; bool visible; }; // i kontener na obiekty tej klasy: class LineOfPixels : private std::vector < Pixel > { public: LineOfPixels(){} LineOfPixels(std::vector < Pixel > vectorToCopy) : std::vector< Pixel >(vectorToCopy) {} size_t size() {return std::vector < Pixel > ::size();} Pixel& getPixelAt(int pixelNumber) {return this->at(pixelNumber);} Pixel& operator[](const int pixelNumber) {return std::vector < Pixel > ::operator[](pixelNumber);} }; int main() { int size = 2; LineOfPixels lineOfPixels(std::vector <Pixel>(size, Pixel(0, 0))); lineOfPixels[1].makeInvisible(); lineOfPixels.getPixelAt(1).makeVisible(); return 0; }
Po instalacji Qt Creatora opcja Clang Code Model domyślnie jest wyłączona. Jeśli teraz w programie chcemy odwołać się do obiektu klasy Pixel przez zwykły getter:
lineOfPixels.getPixelAt(1).makeInvisible();
to podpowiadanie składni zadziała normalnie pokazując listę dostępnych składowych na każdym poziomie. Natomiast gdy zrobimy to samo przez przeciążony operator[] jak tutaj:
lineOfPixels[1].makeInvisible();
to podpowiadanie składni zgłupieje i nic nam nie pomoże. Po wpisaniu „lineOfPixels[1].” nie otrzymamy żadnej podpowiedzi.
Aby podpowiadanie składni działało poprawnie w każdych warunkach, trzeba włączyć plugin ClangCodeModel, zaznaczając opcję w Help → About Plugins… → C++ → ClangCodeModel.
Ciekawe, Clang code model jest domyślny od kilku już wersji, a od chyba 3.6 trzeba specjalnie włączyć stary plugin żeby w ogóle mieć wybór.