Seite 1 von 1

MainWindow und Widgets

Verfasst: 27. Juni 2008 13:41
von moviemax
Hallo zusammen
folgendes Scenario:
Ich erstelle aus QMainWindows herraus eine QWidget.

Das was mich nervt ist nun (unter WinXP,
es wird sicherlich generell so sein ), dass die beiden Fenster unabhängig voneinander sind
1. In der Taskleiste werden erscheint dann zweimal das Programmsymbol
und
2. Mit <Alt>+<Tab>kann man zwischen den Anwendungen springen und durch das Hauptfenster und dem Widget blättern.

Es soll aber in der Taskleister nur das Hauptfenster angezeigt werden als auch mit <Alt>+<Tab>nur zwischen dem Hautpfenster und anderen Programmen gewechselt werden.

in MainWindow rufe ich das fenster so auf

Code: Alles auswählen

 connect(wfDialog, SIGNAL( finished(int) ), this, SLOT( openWfStatus(int) ) );
.. 


WfStatusWindow *wfWindow = new WfStatusWindow(wfid, this , Qt::Window );
    wfWindow->show();

.....

class WfStatusWindow : public QWidget, protected Ui_WfStatusWindow
{
	Q_OBJECT
public:
    WfStatusWindow(int wfId, QWidget* parent = 0, Qt::WFlags flags = 0);	
    QSize sizeHint() const;


gruß moviemax

Verfasst: 27. Juni 2008 13:46
von Christian81
WindowFlags korrekt setzen würde ich mal sagen - z.B. Qt::Tool oder evtl. Qt::SubWindow

Verfasst: 27. Juni 2008 14:01
von moviemax
:oops: äh .. da muss mich for lauter Widgets
das Flag übersehen haben. ich hatte schon fast alles
durchprobiert .

mercy

kann man noch einfach es hinbekommen das das Widget nicht aus
dem MainWindows Bereich nicht herrausgeschoben werden kann.

moviemax

Verfasst: 27. Juni 2008 14:24
von Christian81
Vielleicht mit einem QDockWidget

Verfasst: 27. Juni 2008 14:31
von moviemax
nein da habe ich mich schon ziemlich mit abgequält,
es darf gar nicht andocken.

eigentlich soll es so sein wie beim (q)designer das zu
konstruierende Widget:
1. man kann es nur minimieren
2. man kann es nicht aus dem MainWindow Bereich schieben.
3. es soll nicht docken.

ich habe hatte aber keine Zeit den source für genau dieses
fenster im designer zu finden.
moviemax

Verfasst: 27. Juni 2008 14:52
von Christian81
Trotzdem QDockWidget mit Qt::NoDockWidgetArea

Verfasst: 27. Juni 2008 15:00
von RHBaum
eigentlich soll es so sein wie beim (q)designer das zu
konstruierende Widget:
1. man kann es nur minimieren
2. man kann es nicht aus dem MainWindow Bereich schieben.
3. es soll nicht docken.
Klingt wie MDI, oder ???
http://de.wikipedia.org/wiki/Multiple_D ... _Interface
Zumindest wenn du den QDesigner im MDI modus hattest
Edit->User Interface Mode->Docked Windows

Also das Fenster fuer die Forms iss da nen typisches MDI Child !
Die Werkzeugleisten natuerlich Dockwidgets :-)

Wie man MDI fenster baut, siehe QWorkspace ....

Ciao ...

Verfasst: 27. Juni 2008 15:11
von moviemax
Wie gesagt, die DockWidget haben ich mich schon
zum wahnsin getrieben. Qt::NoDockWidgetArea
hatte ich auch schon probiert. wenn es nicht dockt kann man es
trotzdem rausschieben. Siehe qtdemo -> mainwindows -> Dock Widgets

Ok MDI sieht ganz gut aus qtdemo -> mainwindows -> MDI

ich hoffe da geht dann trotzdem das Qt::subwindows flag.

Zur Erklärung: es werden StatusFenster für laufende Jobs angezeigt.
Die sollten immer nebeneinander auf dem MainWindows sein, oder
minimiert .



merci

Verfasst: 27. Juni 2008 15:28
von RHBaum
MDI macht nur wirklich sinn, wenn du mehere unabhaengige Views haben willst. die du getrennt oeffnen schliessen etc willst.
Die sollten immer nebeneinander auf dem MainWindows sein, oder
minimiert .
ohne oeffnen und schliessen macht das irgendwie wenig sinn
Kenne keine app, die mir verschiebbare Fensterle anbeitet, die ich nur minimieren kann, aber ned verstecken ...

Das waer eher wiederum das einsatztgebiet fuer Toolbars (Dockwidgets)

Irgendwie bist mit der anforderung mittendrinn ... weiss ned ob das ueberhaupt nen gaengiges fensterkonzept ist und von den windowmanagern unterstuetzt wird ...
Wobei man nen close scho abfangen kann und stattdessen nen minimieren anstossen, aber ob das sinn der fenster sein kann ...

Ciao ...

Verfasst: 27. Juni 2008 15:53
von moviemax
schließen habe ich schon abgefangen,
weil man sonst den JobThread nicht mehr beenden könnte.
So sieht das widget aus: liste sind Datei (job)-Namen.
[Start] ist natürlich Start/Stop und close geht nur wenn
der Stop aktiviert wurde und der Thread sich tatsächlich
beendet hat.

Code: Alles auswählen

+----------------------+
+----------------------+
 | -----------             |
 | |list        | [start ]  |
 | |            | [close]  | 
 | |            |             |
 | |            |             |
 | -----------              |
 | -----------              |
 | | current |             |
 | -----------              |
+----------------------+
Irgendwie bist mit der anforderung mittendrinn ... weiss ned ob das ueberhaupt nen gaengiges fensterkonzept ist und von den windowmanagern unterstuetzt wird ...
Wobei man nen close scho abfangen kann und stattdessen nen minimieren anstossen, aber ob das sinn der fenster sein kann ...
Nein das Programm läuft eingeltich schon, nur schönheitskorrekturen.

Verfasst: 27. Juni 2008 18:05
von RHBaum
Fensterverhalten ist Schoenheit ^^

warum haengst du den Thread ans Fenster ?
warum kein Jobmanager, und das widget qasi nur als view dazu ...
so das das schliessen und (wieder)oeffnen des fensters keinerlei einfluss auf den Job hat, sondern nur ne einblendbare Steuerung darstellt ?

Was passiert eigentlich, wenn dein Thread laueft, und jemand auf das boese x am mainfenster drueckt ? Bzw. was sollte da passieren ...

ciao ...

Verfasst: 4. Juli 2008 11:41
von moviemax
Äh kann bei den MID windows prinzipiell immer nur ein
Widget aktiv sein oder auch mehrere ?

moviemax

Verfasst: 4. Juli 2008 12:18
von upsala
Es kann immer nur ein Widget aktiv sein, oder kennst du eine Anwendung bei der mehrere Aktiv sind?