Tag: Qt

Wzorzec obserwator C++/Qt

Wzorzec obserwator C++/Qt

Często się zdarza że programiści napotykają problem we współczesnych programu posiadające interfejs użytkownika (GUI), muszą reagować na zmiany danych w kilku różnych miejscach jednocześnie. Do sytuacji takiej może dojść wtedy gdy pracujemy na tych samych danych, które możemy edytować w kilku miejscach jednocześnie np. wykresy […]

Pytania rekruterów na stanowisko C++/Qt Developer.

Pytania rekruterów na stanowisko C++/Qt Developer.

1. Co to jest dziedziczenie? 2. Czym jest polimorfizm? 3. Jakie znasz wzorce strukturalne? 5. Do czego służy rzutowanie? 6. Czy język C++ jest językiem obiektowym? 7. Co to jest kompilacja? 8. Czym jest linkowanie? 9. Co to jest zmienna statyczna? 10. Czym jest zakres […]

How to initialize static QMap?

How to initialize static QMap?

// A.h file
class A{
public:
A(){};

private:
static const QMap<qstring, int=""> my_map;
}

After all includes, in cpp file, we initialize static member types.

#include "A.h"
// A.cpp file
const QMap<qstring, int=""> A::my_map = { {"a",1} ,{"b",2} };</qstring,>

A:A
{
}
Wzorzec Adapter C++/Qt

Wzorzec Adapter C++/Qt

Zastosowanie Adapter inaczej nazywany Nakładką (ang. wrapper) to strukturalny wzorzec projektowy, którego zadaniem jest stworzenie spójnego interfejsu dla dwóch niekompatybilnych klas. Adapter przekształca interfejs jednej z klas na interfejs drugiej. Wskazówki praktyczne Aby stworzyć wspólny interfejs warto zaimplementować klasę z metodami wirtualnymi która będzie częścią […]

Wzorzec Fabryka abstrakcyjna i Metoda wytwórcza C++/Qt

Wzorzec Fabryka abstrakcyjna i Metoda wytwórcza C++/Qt

Omówienie wzorca projektowego „Fabryka abstrakcyjna” na przykładach C++.

Wzorzec projektowy Singleton C++ / Qt

Wzorzec projektowy Singleton C++ / Qt

Zastosowanie

Kreacyjny wzorzec projektowy, charakteryzujący się jedną instancją danego obiektu oraz globalnym dostępem do funkcji getInstance(), dzięki czemu możemy uzyskać do niego dostęp praktycznie z każdego miejsca. Inną cechą charakterystyczną jest Lazy loading, czyli alokacja pamięci dla singletona występuje dopiero przy jego pierwszym wywołaniu (odwołaniu się do niego za pomocą funkcji getInstance()).

Singleton

Własności singletona

ZALETY

  • jest tworzony przy pierwszym wywołaniu,
  • jest niszczony po zakończeniu działania programu,
  • po utworzeniu istnieje tylko i wyłącznie jego jedna instancja,
  • programista nie uczestniczy w procesie wywołania konstruktora, który zwykle jest prywatny lub zabezpieczony (protected), po to aby nie tworzyć więcej instancji obiektu singletona.

WADY

  • Rozhermetyzowanie klas poprzez globalny dostęp,
  • Trudniejsza analiza aplikacji podczas testów,
  • Może powodować problemy podczas wykorzystania go w wielowątkowych procesach.
#include <QDebug>
#include <QString>

class Ustawienia
{
public:
    static Ustawienia & getSingleton()
    {
        static Ustawienia singleton; // lazy Loading
        return singleton;
    }

    void setStyle(const QString style)
    {
        this->style = style;
    }
    QString getStyle(){return style;}

private:
    QString style;
    Ustawienia(): style("Unknown"){}
    ~Ustawienia(){}

};

class Klient
{
public:
    Klient( )
    {
    Ustawienia::getSingleton().setStyle("Blue");
    }

    void whiteStyle()
    {
        Ustawienia::getSingleton().setStyle("White");
    }
};

void funkcjaGlobalStyle()
{
    qDebug() << Ustawienia::getSingleton().getStyle();
}

int main()
{
    funkcjaGlobalStyle();

    Klient klient;
    funkcjaGlobalStyle();

    klient.whiteStyle();
    funkcjaGlobalStyle();

    Ustawienia::getSingleton().setStyle("Red");
    funkcjaGlobalStyle();

    return 0;
}

Rezultat

"Unknown"
"Blue"
"White"
"Red"
Wzorzec Budowniczy C++/Qt

Wzorzec Budowniczy C++/Qt

Budowniczy Wzorzec Budowniczy to wzorzec kreacyjny zapewniający kontrolę nad procesem tworzenia klas. Jest on przydatny, gdy chcemy zastosować wiele różnych konstruktorów, zapewniając większą czytelność kodu. Elementy charakterystyczne W tym wzorcu możemy wyróżnić następujące elementy: Budowniczy – interfejs abstrakcyjny do tworzenia części składowych obiektu złożonego, w […]

Generating random number using srand() and rand() Qt

Generating random number using srand() and rand() Qt

You can use random function from stdlib and fix time to maximize pseudo random operation in a short period of short time. const int MainWindow::getNumber() const { qsrand( (unsigned)time(NULL) ^random()); return qrand() % max; } Using qsrand(QTime::currentTime().msec()) it can also be done, but in a […]

Recenzja książki „C++ i Qt – wprowadzenie do wzorców projektowych”

Recenzja książki „C++ i Qt – wprowadzenie do wzorców projektowych”

Qt wprowadzenie do wzorców projektowych

Książkę można byłoby zawrzeć w jednym zdaniu – jest to zdecydowanie najlepsza pozycja o Qt, którą czytałem. Choć zdjęcie wygląda, jakbym ją wypożyczył z biblioteki, gdzie była czytana co najmniej przez kilkadziesiąt osób, to jednak muszę przyznać, że jest to książka którą czytałem sam wielokrotnie, a jej wygląd wynika z wysokiej jakości treści i przykładów dobrych praktyk, do których wracałem.

„C++ i Qt wprowadzenie do wzorców projektowych” zawiera kompleksowe omówienie zasad tworzenia wysokiej jakości oprogramowania. Wyjaśnione są w niej najważniejsze wzorce projektowe, widgety, sposoby ich konstruowania, pokazany na przykładach język modelowania UML. Autorzy rekomendują też w większości narzędzia typu open source i podają wiele przykładów praktycznych.

ZALETY

Po przeczytaniu książki można wielokrotnie do niej wracać, ponieważ jest w niej tak dużo rozwiązań i solidnych przykładów, że mogłaby się  ona z powodzeniem nazywać biblią programisty.

REKOMENDACJA

Lekturę polecam osobom, które miały już styczność z programowaniem. Raczej co najmniej śrenio zaawansowanym programistom. Książkę mogę zarekomendować wszystkim, chcącym stać się lepszymi programistami C++/Qt.

OCENA

Bez zastanowienia: 10/10.

&nb