Moje zdjęcie
Uczeń LO im. Ma­­ła­chow­skie­go w Płoc­ku. Lubi czy­tać książ­ki. Ma du­żo po­my­słów, jed­nak za­zwy­czaj ma­ło chę­ci lub nie­do­bór umie­jęt­no­ści na ich re­ali­za­cję. In­te­re­su­je się pro­gra­mo­wa­niem. Bie­rze udział w kon­kur­sie po to aby na­uczyć się cze­goś no­we­go. Ocze­ku­je na kon­struk­tyw­ną kry­ty­kę.

niedziela, 3 października 2010

201: Rozszerzony efekt aero vel przezroczyste okno

Qt jest biblioteką multiplatformową. Nie należy wymagać od niej, że będzie sama z siebie obsługiwać dziwne wynalazki twórców pojedynczych systemów operacyjnych, takich jak na przykład niszowych Windowsów Vista i 7. Serio, nie należy, nie było w tym ironii. Na szczęście są programiści Qt, którzy tę funkcjonalność napiszą i udostępnią kod do nieograniczonego użytku.

Podoba mi się interfejs Aero. Nie podoba mi się, gdy ktoś nie potrafi go użyć. Mimo to wierzę, że da się zrobić ładny interfejs przy użyciu funkcjonalności jaką daje nam Aero. Mam na myśli rozszerzony efekt przezroczystości. Uważam, że potrafię to zrobić, zatem Logtree będzie taki bajer posiadał. Osiągnięcie tego efektu w Qt jest bardzo proste.

Zaczynamy od ściągnięcia i rozpakowania tego pliku. Kopiujemy pliki qtwin.h i qtwin.cpp do folderu z naszym kodem oraz dodajemy je do projektu Qt Creatora. Resztę plików wyrzucamy. Na koniec do pliku mainwindow.cpp dołączamy pliki QtGui i "qtwin.h", zaś do konstruktora naszego okna głównego dorzucamy taki oto kawałek kodu:

#ifdef Q_WS_X11
setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_NoSystemBackground, false);
QPalette pal = palette();
QColor bg = pal.window().color();
bg.setAlpha(180);
pal.setColor(QPalette::Window, bg);
setPalette(pal);
ensurePolished();
setAttribute(Qt::WA_StyledBackground, false);
#endif
if (QtWin::isCompositionEnabled()) {
QtWin::extendFrameIntoClientArea(this);
setContentsMargins(0, 0, 0, 0);
}

Kompilujemy et voila mamy szybę. Świetnie nadaje się do cenzurowania screenshotów.

Kod ten jest udostępniany do użytku bez żadnych ograniczeń ale też żadnych gwarancji. Jak jednak widać na załączonym obrazku: działa. Co prawda nie miałem jeszcze okazji sprawdzić jak wygląda na innych systemach operacyjnych, jednak wierzę, że zgodnie z zapewnieniami tak, jakby tego kodu w ogóle nie było. I o to chodzi ;)

PS: Nie, nie interesuje mnie jak ten kod konkretnie działa, w tym przypadku liczy się, że działa.

Brak komentarzy:

Prześlij komentarz