Statusbar alapban csak mainwindow-ban van, de nekünk kellene dialog ablakba is. Elméletileg egy layout-ban jelenítjük meg a statusbar-t.
Íme a nagyon bonyolult kód:
bar = new QStatusBar();
1. bar->setSizeGripEnabled(FALSE);
2. QVBoxLayout *statusbar_layout = new QVBoxLayout(this);
3. statusbar_layout->setAlignment(Qt::AlignBottom | Qt::AlignVCenter);
4. statusbar_layout->setContentsMargins(0,0,0,0);
5. statusbar_layout->addWidget(bar);
6. bar->clearMessage();
7. bar->setStyleSheet(GRAY_BORDER);
1. Ne akarja a user átméretezni a statusbar-t
2. Létrehozzuk a layout-ot, ami tartalmazni fogja a statusbar-t. Ezt designer-ben is megtehetnénk, de így csak be kell másolni a constructor-ba a fenti kódot, és nem kell illesztgetni a form-on.
3. Letesszük alulra teljes szélességben a layout-ot.
4. Gyárilag 11pixel margót hagy minden oldalon a rendszer, ez most nekünk nem kell.
5. No comment.
6. Ha valami szemét maradt a memóriában, azt kisöpörjük.
7. GRAY_BORDER = #define GRAY_BORDER "QStatusBar {border: 1px solid gray;}" Így nem kell mindig újra definiálni a keretet. Ha módosítani kell, akkor is egyszerűbb egy helyen átírni, mint az összes fom-nál. A #define részt én egy közös header-be tettem (.h), és beforgatom minden osztályba, ahol kell
És a feszítő kérdés, hogy mi a nyákért nem egy sima QLabel-el csináltam meg az egészet? Mert a statusbar->showMessage utasítással külön timer vezérlése nélkül is tudunk meghatározott ideig üzenetet megjeleníteni.
Az eredmény:
Itt a vége, fuss el véle.
Legközelebb QTableView frissítése, úgy, hogy a header is mgmarad.