Krzysztof Wesołowski » Qt http://kwesoly.net Programowanie, elektronika, automatyka - doświadczenia i projekty Wed, 07 Sep 2011 14:03:29 +0000 pl-PL hourly 1 Zapisywanie ustawień aplikacji – QSettings w QT http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/ http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/#comments Sun, 09 May 2010 18:13:28 +0000 http://kwesoly.net/?p=466 Kontynuując tradycję rzadkich wpisów o ciekawych rzeczach które warto poznać/wykorzystać chciałbym wam przybliżyć trochę klasę QSettings. Do tej pory większość moich aplikacji nie potrafiło sensownie obsługiwać pamiętania różnych drobiazgów między uruchomieniami. Często najważniejsze rzeczy zapisywano w jakimś "własnym" typie plików, podczas gdy cała reszta była resetowana po każdym uruchomieniu.

Klasa QSettings rozwiązywała część tych problemów - pozwalając skierować grupę ustawień do pliku/rejestru. Niestety, pierwszy wymyślony sposób ich użycia stał się bardzo szybko uciążliwy - zapisywanie setek ustawień w jednym miejscu, pilnowanie aby odczyt zgadzał się z zapisem - jak łatwo się domyślić szybko stało się to nie do opanowania.

Niedawno czytając dokumentację, i stając przed podobnym problemem znalazłem sensowniejsze podejście - wraz z dostarczonymi metodami pozwalające zminimalizować nakład pracy.

Zacznijmy od samego początku naszego programu, dostarczając parę istotnych informacji:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QApplication::setOrganizationName("RainLabs");
QApplication::setOrganizationDomain("rainlabs.pl");
QApplication::setApplicationName("Orbi Eye");
QApplication::setApplicationVersion("0.2 alpha");

AutoPhotoAdvanced b;
b.setWindowTitle(QApplication::applicationName()+" v"+QApplication::applicationVersion());
b.show();
return a.exec();

}

Po takim wywołaniu każda klasa potrzebująca skorzystać z ustawień może to zrobić niezwykle szybko i wygodnie - np. w konstruktorze/destruktorze, za pomocą:

QSettings settings;
settings.setValue(....) / settings.value(...)

dzięki takiemu podziałowi każde ustawienia są niezależne, zaś dokonane na początku ustawienia aplikacji pozwalają korzystać z domyślnego konstruktora, co ułatwia ich używanie w całym programie, nie uciekając się do kopiowania kawałka kodu tam i z powrotem lub co gorsza pamiętania jakie argumenty przekazać za każdym razem konstruktorowi.

]]>
http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/feed/ 0
Program prezentujący działanie algorytmów działających na grafach http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/ http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/#comments Tue, 06 Oct 2009 22:01:06 +0000 http://kwesoly.net/?p=390 Algorytm Minty'ego Tworzenie grafu

Przy okazji podnoszenia jednej oceny powstał prosty program prezentujący 3 algorytmy operujące na grafach. Pozwala on wprowadzić dowolny graf, o rożnych wagach a następnie prezentuje jego rozwiązanie krok po kroku.

Program powstawał  przy mniejszej lub większe niechęci przez wakacje. Pierwsza część programu to edycja i implementacja struktur grafowych.  Klasy tam zaimplementowane pozwalają zaprojektować graf, zapisać go/wczytać i uruchomić fragment prezentujący dany algorytm. Drugą częścią jest abstrakcyjna klasa AbstractSolver, ułatwiająca pisanie klas rozwiązujących o spójnym wyglądzie i funkcjonalności. Właśnie te 3 przykładowe algorytmy stanowią drugą cześć, stworzoną już nie przeze mnie ale przez Jakuba Tutro i Pawła Górkę.

W tym projekcie najbardziej zadowala mnie rozplanowanie jego działania, i zaprojektowanie klas,  które choć zapewne nie jest idealne, umożliwiło jasny podział pracy, zminimalizowało ilość kodu i zwiększyło elastyczność takiego rozwiązania.

Program powstawał przy równoczesnej pracy, dlatego do jej synchronizacji wykorzystałem darmowy serwis http://www.assembla.com/, a konkretnie udostępniony przez niego serwer SVN. Zainteresowani mogą pobrać projekt prosto z repozytorium: http://subversion.assembla.com/svn/graph-algorithms.

Dla nie potrafiących korzystać z SVN, lub tylko chcących zerknąć na efekt prac zamieszczam tutaj gotowy instalator z potrzebnymi plikami DLL (całość opiera się o biblioteki QT4.5).

Instalator: Instalator programu Grafy-Algorytmy

Pliki: Pliki wykonywalne i skrypt instalatora

Źródła: Źródła programu Grafy-Algorytmy

]]>
http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/feed/ 0
Używanie klasy QSyntaxHighlighter z bibliotek QT 4.4 http://kwesoly.net/programowanie/cpp/syntax_highlighter/ http://kwesoly.net/programowanie/cpp/syntax_highlighter/#comments Sun, 04 Jan 2009 07:48:48 +0000 http://kwesoly.net/?p=247 W ramach dodatkowego projektu z programowania w języku C++ wykonałem małą aplikację demonstrującą użycie klasy QSyntaxHighlighter z bibliotek Qt do kolorowania składni. Stworzona klasa HSyntaxHighlighter wykorzystuje przygotowane przez twórców Qt elementy co ułatwiło jej wykonanie. Program w prosty sposób koloruje składnie zgodnie z ustawieniami, umożliwia również dostosowanie kolorowania każdego rodzaju kodu do swoich potrzeb za pomocą:

  • wyboru czcionki odpowiedzialnej za daną część kodu
  • wyboru koloru czcionki
  • wyboru tła
  • oraz edycji wyrażeni/wyrażeń regularnych odpowiedzialnych za rozpoznawanie tekstu

Program obsługuje podstawowe bloki

  • Komentarz jednoliniowy
  • Komentarz wieloliniowy
  • Stałe znakowe
  • Stałe liczbowe
  • Dyrektywy preprocesora
  • Słowo kluczowe/zarezerwowane

ale jego struktura umożliwia łatwe dodawanie własnych bloków (poprzez edycje kilku stałych wartości przed kompilacją)

Ustawienia dotyczące kolorowania są przechowywane w plikach *.ini, za pomocą klasy QSettings.

Program został napisany w  środowisku Eclipse CDT , z dodatkami QtEclipseIntegration do tworzenie interfejsu oraz Eclox w celu ułatwienia używania doxygen'a zaś kod został w całości udokumentowany (w j. angielskim) zgodnie z składnią Doxygen.

Zapraszam do przejrzenia i zgłaszania uwag.

Cały program objęty jest licencją GPL 3.0, źródła dostępne poniżej.

Syntax Highlighter 1.0 (wraz z plikami DLL od Qt)

Syntax Highlighter 1.0 (tylko plik exe)

Syntax Highlighter 1.0 (źródła)

Syntax Highlighter 1.0 (dokumentacja)

Licencja GPL 3.0

Wersja 1.1

Poprawiono:

dynamiczna edycja listy bloków, kilka poprawek estetycznych. Bloki podświetlają się niezależnie, po kolei.

Syntax Highlighter 1.1 (wraz z plikami DLL od Qt)

Syntax Highlighter 1.1 (tylko plik exe)

Syntax Highlighter 1.1 (źródła)

Syntax Highlighter 1.1 (dokumentacja)

Licencja GPL 3.0

]]>
http://kwesoly.net/programowanie/cpp/syntax_highlighter/feed/ 0