Seite 1 von 1

Ist eine Anwendung komplett disablebar ausser Loginwidget?

Verfasst: 21. August 2008 17:03
von Zonk
Hallo,

ist es möglich eine komplettes Anwendungsfenster zusperren und gleichzeitig ein Childwidget ( LoginWidget ) zu enabeln, damit man sich wieder ienloggen kann udndie Anwendung wieder freigegeben wird?

Meine Idee war:

Code: Alles auswählen

mainwindow->setEnabled( false ); 
loginWidget->setEnabled( true );
Leider funktioniert das nicht da sich dass Loginwidget wohl nicht gegen das Hauptfenster durchsetzten kann.

Es wäre schade wenn ich alle Elemente der GUI mühsam disablen müsste, damit ich einen Loginmechanismus realisieren kann.

Beherrscht Qt schon einen vorgefertigen Loginmechanismus, der die Anwendung nach x Minuten Inaktivität sperrt?

Vielen Dank, Torben

Verfasst: 21. August 2008 17:28
von jd
Hallo, ich mache so was mit

Code: Alles auswählen

mainwindow->hide();
so long
jd

Verfasst: 21. August 2008 17:49
von Zonk
nachdem das loginWidget in die GUI eingebettet ist klappt auch das nciht, da da s loginwidget mit ausgeblendet wird und nicht einblendbar ist.

mein Versuch schaute so aus:

Code: Alles auswählen

	mainwindow->hide();
	login->show();

Wie realisierst du eigentlcih den Timer, der die Anwendung nach 10 Minuten Inaktivität ausschaltet? Die eingabe-Events werden ja von den verarbeitenden Widgets akzeptiert und erreichen daher seltenst das Mainwindow, oder?

Vielen Dank für die Hilfe, Torben

Verfasst: 21. August 2008 17:54
von jd
Mach mal bevor du das Loginwindow einblendest ein neues Object. Falls schon mal erstellt.

Code: Alles auswählen

delete login
login = new loginwindow;
login->show();
Zeig uns mal etwas mehr Code.

Verfasst: 21. August 2008 18:20
von Zonk
da ich noch an der Grundstruktur bin gibt es leider noch nicht mehr Code.

Ich habe ein Mainwindow mit einer Benutzeroberfläche und mehreren Toolbars.

Eine der Toolbars heißt toolbar_login und beinhaltet ein Widget vom der Klasse "login", abgeleitet von QWidget.

Ich möchte nun dass nach Ablauf eines Timers die Anwendung sperrt und nur das Loginwidget offen ist, damit sich der Benutzer neu authentifizieren muss.

Variante A: alle Widgets der Benutzeroberfläche mit
<Widgetx->setEnabled ( false );>
blocken, auser dme Loginwidget.

Nachteil: Die GUI ist komplex, ich müsste also ewig viele Widgets disablen.

Variante B: Ich disable das Mainwindow und Enable nur das LoginWidget.

-> geht leider nicht, wie ich mir das dachte.

Das einzige was ich bisher hinbekommen habe, ist dass ich das gewünschte Realisiere mit

Code: Alles auswählen

ui.centralWidget->setEnabled( false );
ui.toolbarX->setEnabled ( false );
ui.dockwidgetX->setEnabeld( false );
ui.menu->setEnabeld( false );
Da ich aber viele Dockwidgets habe und einige Toolbars ist es relativ aufwändig die GUI auf diese Weise zu sperren.

Ganz ausblenden möchte ich die Anwendung auch ungern, da es dann einige User geben könnte die die Anwendung für geschlossen oder abgestürzt halten, weil sie evtl. das ( kleine ) loginfenster übersehen. Mir wäre aus dem Grund ein disablen ( grau machen ) lieber..

Verfasst: 21. August 2008 19:00
von upsala
Schon mal versucht, eine Anwendung zu bedienen, wenn im Vordergrund ein QDialog geöffnet wurde? (Über exec()...)

Verfasst: 21. August 2008 19:16
von -=Freaky=-
koennte man evtl. alle child-widgets von deinem main window oder sonsteinem parent widget durchgehen (http://doc.trolltech.com/4.4/qobject.html#children), mit deinem login widget vergleichen und dann ggf. disablen?

mfg,
julian

Verfasst: 23. August 2008 13:07
von Baz
upsala hat Recht - du kannst für dein Loginfenster einfach den windowModality auf ApplicationModal stellen, wenn du dann das Dialogfenster über exec() aufrufst, sollte das restliche Programm komplett gesperrt sein.

Verfasst: 23. August 2008 15:08
von Zonk
Ja, so ist es möglich, es ist aber gewünscht dass die Applikation die Sperrung durch "ausgrauen" ( disablen der elemente) durchführt.. habs jetzt soweit hinbekommen, indem ich Menü, dockwidets, centralwidget und toolbars manuel disable - alles ausser dem logintoolbar halt...

vielen Dank für eure Hilfe! :)