Ist eine Anwendung komplett disablebar ausser Loginwidget?

Alles rund um die Programmierung mit Qt
Antworten
Zonk
Beiträge: 51
Registriert: 17. September 2006 15:28
Kontaktdaten:

Ist eine Anwendung komplett disablebar ausser Loginwidget?

Beitrag 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
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag von jd »

Hallo, ich mache so was mit

Code: Alles auswählen

mainwindow->hide();
so long
jd
Zonk
Beiträge: 51
Registriert: 17. September 2006 15:28
Kontaktdaten:

Beitrag 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
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag 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.
Zonk
Beiträge: 51
Registriert: 17. September 2006 15:28
Kontaktdaten:

Beitrag 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..
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Schon mal versucht, eine Anwendung zu bedienen, wenn im Vordergrund ein QDialog geöffnet wurde? (Über exec()...)
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag 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
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Beitrag 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.
Zonk
Beiträge: 51
Registriert: 17. September 2006 15:28
Kontaktdaten:

Beitrag 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! :)
Antworten