PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT Statusbar verwenden ?



ramonl
15-11-2004, 14:38
Habe jetzt endlich ne statusBar, nur wie kann ichd er sagen,wenn ich der z.b. mit


statusBar()->message(date); gebe, wobei date ne variable vom typ string ist, das er das nicht ganz links macht, sondenr da wo ich will ?


Jetzt schriebt er alles links hin,und überschreibt halt das was vorher da stand...

lumbar
16-11-2004, 12:22
Habe jetzt endlich ne statusBar, nur wie kann ichd er sagen,wenn ich der z.b. mit


statusBar()->message(date); gebe, wobei date ne variable vom typ string ist, das er das nicht ganz links macht, sondenr da wo ich will ?
stand...

Leite eine Class von QStatusBar ab. Da implementierst du einfach die Methode neu. Außerdem kannst du ein QWidget (z.B. QLabel) hinzufügen und diesem einen Text zuweisen. Siehe dazu:

http://doc.trolltech.com/3.3/qstatusbar.html#addWidget

Ganz bequem wäre es, wenn du dies kombinierst: Klasse ableiten mit einem Konstruktor in dem du mittels addWidget() die Strings hinzufügst. Dann Funktionen hinzufügen die heißen: setTextLinks( const wxString& text) und das gleiche für rechts.

ramonl
16-11-2004, 13:09
na, habs jetzt doch geschafft der statusbar messegas zu geben,auch an die gwünschte position und so...

bekomme nur den frame nicht weg, schon alles probiert, mit plain und sowas, will aber gar keinen rahmen haben bei den einzelnen feldern der statusbar, sind alles QLabels.

anda_skoa
16-11-2004, 16:12
Das dürfte entweder Margin oder Spacing des Statusbar Layouts sein.

Kannst ja mal versuchen, die beiden Werte zu ändern.

Ciao,
_

ramonl
16-11-2004, 16:24
nee bei statusbar (siehe docu) kann man nicht an marging oder spacing drehen....


man ,laut docu wnen ich meine labels so definiere:


message->setFrameStyle(QFrame::MenuBarPanel | QFrame::Plain);

müsste er kein rahmen machen, wenn ich andere sachen reinschriebe macht er ja auch mal dicken rahmen,mal 3d,je nach dme ahlt,aber nicht, das nix da is, hat jemand noch ne idee ?


Raff ich nicht das es laut docu so ja gehen müsste...

anda_skoa
16-11-2004, 16:27
nee bei statusbar (siehe docu) kann man nicht an marging oder spacing drehen....

Ich sagte ja am Layout des StatusBar, nicht am StatusBar.
Die Widgets im StatusBar sind unter an Sicherheit grenzenter Wahrscheinlichkeit in einem Layout.

Ciao,
_

ramonl
16-11-2004, 16:31
also, ich ahbe QLabels, da gehts ja offenbar nicht,siehe mein cod emit QFrame, und StatusBar kommt von QWidget,da i nix mit margin...

hab echt keine idee mehr...

anda_skoa
16-11-2004, 16:45
QLayout::setMargin
QLayout::setSpacing

QWidget::layout()

class QStatusBar : public QWidget

Soweit die Information aus der Qt Doku.

Könnte man also folgendes Versuchen



QStatusBar* b = statusBar();
QLabel* label = new QLabel("Test", b);
b->addWidget(label);
if (b->layout() != 0)
b->layout()->setMargin(0);


Ciao,
_

ramonl
16-11-2004, 16:55
das ja auch schon wieder anders:

bei mir gabs ja schon direkt eine statusBar(), damit arbeite ich auch.

mach das z.b. :

message = new QLabel ("message", statusBar() );

(message im header als QLAbel* angelgelt)

...

statusBar()->addWidget (message , 1, TRUE);


..... kommwn noch andere,deswegen 1, für positionierung.



so,wenn ich jetzt statsusBar()->layout()->setMargin(0) aufrufe,kennt er setMargin nicht.

anda_skoa
16-11-2004, 17:56
so,wenn ich jetzt statsusBar()->layout()->setMargin(0) aufrufe,kennt er setMargin nicht.

Äußerst eigenartig.
Vielleicht hast du dich beim include des qlayout.h verschrieben?

Ciao,
_

ramonl
16-11-2004, 18:06
hatte es nicht included,jetzt läuft er damit,aber keine verbesserung des problems.

anda_skoa
16-11-2004, 19:18
Hmm, vielleicht spacing auch noch auf 0 setzen.

Ciao,
_

ramonl
16-11-2004, 22:10
nee bringt auch nix...

kann doch nicht sein,oder ? habe ja jetzt irgendwie alles schon probiert...

mit jeweils rahmen (gibt zwar auch schöne) sieht es aber blöder aus, wollte ja keien rahmen und über der statusbar habe ich einfach ne waagerechte linie....


hab gerade mal ein textLabel,is ja auch QLabel im QT designer auf meien rnormalen oberfläche,also oberhalb der statusbar hingepackt,und da zeigt er es im prog richtig an, und wenn ich dieses textLabel einfach an die stausbar adde, dann macht er dort keinen rahmen, also liegt es nicht an der statusbar, sondern wohl irgendwie am QLAbel...


abe rich hab doch frame shape und shadow auf noFrame und plain gesetzt, genau wie das neue qLabel im QT Designer als attribute hat...

jetzt blickst wahrscheinlich ga rnicht mehr durhc,oder ?

anda_skoa
16-11-2004, 22:39
Ich hab im Source von QStatusBar nachgesehen und bin mir jetzt ziemlich sicher, dass es das Layout ist.

Allerdings kann das ein verschachteltes Layout sein, wenn das Fenster diese SizeGrip Widget im rechten unteren Eck hat.
Dann bringt es leider nix, am äußeren Layout Margin und Spacing zu ändern, weil die Widgets im inneren Layout eingebettet sind.

Möglicherweise könnte man das noch hintricksen, aber ich denke das bringt's nicht.
Üblicherweise will man ja im Statusbar sehen, welche Anzeige wie weit geht.
Wenn du das nicht willst, "vergisst" du einfach, dass es sowas wie einen Statusbar gibt.

Stattdessen fügst du unten in deinem Widget, das du als CentralWidget setzt, ein QLabel ein und nimmst das Label und das bisherige Widget in ein vertikales Layout.
Dann hast du immer am unteren Rand des zentralen Widgets ein QLabel mit den von dir eingestellten Eigenschaften.

Ciao,
_

ramonl
16-11-2004, 23:39
^^^ Zu deinem Trick? nen label einfach dahin machen wo sonst die StatusBar ist geht nicht, das wird nicht mit angezeigt... und wäre auch programmtechnisch sehr unschön...



hmm, dann bin ich so langsam überfragt...

ich brauche halt ne StatusBar, die so aussieht:

element 1 _______________________ elemtent 2___ element3

also 3 felder in der bar, am besten ganz ohne Rahmen um die Felder, dann kann ich nämlich über der Bar ne Linie machen, und man sieht sie, dann zwischen den Felde vllt. senkrechte Striche, aber es klappt ja nix...

Zeige hier mal den unteren Bereich meines Programms (läuft im Vollbildmodus) und so sieht es ja wohl auch blöd aus, weil die Femster über der Bar im Hauptprogramm halt nicht bis aussen gehen, hat jemand ne Idee ?

screenshot (die box unten is bis fast links,screenshot is bissl falsch, rechts stimmt es)
http://www.deejay-ray.com/test.jpg

Also entweder müssen die Umrandungen weg und nur eine linie drüber, oder man müsste angeben können, das die boxen unten nicht direkt links und rechts anfangen,aber das geht wohl noch weniger...

was soll ich denn nun tun ?

Hie rnochmal mein source code für das so erzeugte, damit sollte ich jetzt alles hingeschrieben habe was nötig ist, und komme trotzdem nicht weiter...




statusBar()->layout()->setMargin(0);
statusBar()->layout()->setSpacing(0);

currentdate=new QDate();
QString date = currentdate->currentDate().toString();
currenttime=new QTime();
QString time = currenttime->currentTime().toString();


message = new QLabel( "message ", statusBar() );
xValue = new QLabel( "xValue ", statusBar() );
yValue = new QLabel( "yValue " , statusBar());
xValue->setFixedWidth( 100 );
yValue->setFixedWidth( 100 );



xValue->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
yValue->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
message->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
yValue->setText(date);
xValue->setText(time);


statusBar()->addWidget( message, 1, TRUE);
statusBar()->addWidget( xValue , 0, TRUE);
statusBar()->addWidget( yValue , 0, TRUE);

anda_skoa
17-11-2004, 11:11
^^^ Zu deinem Trick? nen label einfach dahin machen wo sonst die StatusBar ist geht nicht, das wird nicht mit angezeigt... und wäre auch programmtechnisch sehr unschön...

Nicht unbedingt.
Ein Statusbar ist auch nur ein Widget, wenn der vorhanden Statusbar nicht ausreicht, kannst du entweder ein eigenes Widget machen, oder versuchen eine Subklasse von QStatusBar zu verwenden.

Eventuell kann man auch durch den verwendeten Style beeinflussen, wie der StatusBar gezeichnet wird.

Muss jetzt aber schon sagen, dass es mir bischen schleierhaft ist, warum du ein Widget brauchst, das sich wie ein Statusbar verhält, das aber nicht so aussehen darf.



Zeige hier mal den unteren Bereich meines Programms (läuft im Vollbildmodus) und so sieht es ja wohl auch blöd aus, weil die Femster über der Bar im Hauptprogramm halt nicht bis aussen gehen, hat jemand ne Idee ?


Das spricht für die Zusammenfassung in einem Widget. Dann haben die unteren Widgets und die Oberen auch den selben Abstand zum Rand.





statusBar()->layout()->setMargin(0);
statusBar()->layout()->setSpacing(0);



Probier diesen Teil mal nach den addWidget Aufrufen, möglicherweise wird das entgültige Layout erst dort erzeugt (hab den QStatusBar Source nur kurz überflogen)

Ciao,
_

ramonl
17-11-2004, 11:17
Muss jetzt aber schon sagen, dass es mir bischen schleierhaft ist, warum du ein Widget brauchst, das sich wie ein Statusbar verhält, das aber nicht so aussehen darf.


es sieht ja nicht wie ne statusbar aus, siehe mein bild, er macht ja je nach dem nen rahmen drum,bei den messagen gar nix, das is ja keine klassische statusbar, dann lieber gar nichts oder gleichmässige boxen,das sieht edler aus.



Das spricht für die Zusammenfassung in einem Widget. Dann haben die unteren Widgets und die Oberen auch den selben Abstand zum Rand.


Da weiss ich leider nicht wie ich das anstellen soll, hast bestimmt auch keinen bock mir den code zu posten, nich ?



Probier diesen Teil mal nach den addWidget Aufrufen, möglicherweise wird das entgültige Layout erst dort erzeugt (hab den QStatusBar Source nur kurz überflogen)


Auch hier keine Ahnung wie....

anda_skoa
17-11-2004, 15:06
es sieht ja nicht wie ne statusbar aus, siehe mein bild, er macht ja je nach dem nen rahmen drum,bei den messagen gar nix, das is ja keine klassische statusbar, dann lieber gar nichts oder gleichmässige boxen,das sieht edler aus.

Wie gesagt verhält es sich wie ein StatusBar, soll aber anders aussehen.
Ist zwar eigenartig, aber wenn das die einzige Anwendung ist die läuft, kann man das schon machen.



Da weiss ich leider nicht wie ich das anstellen soll, hast bestimmt auch keinen bock mir den code zu posten, nich ?

Dafür brauchst du keinen Code.
Einfach im Designer unten noch einen QFrame in dein Hauptwidget geben, Eigenschaften auf NoFrame und Plain stellen, die Labels rein, Layouten, Layouteigenschaften entsprechend einstellen.



Auch hier keine Ahnung wie....
Die beiden Zeilen markieren, im Editor die Funktion "Ausschneiden" benutzen.
An die Stelle nach den addWidget aufrufen gehen, im Editor die Funktion "Einfügen" benutzen.
(Unter der Annahme dass dein Editor das kann und du weißt wo du diese Funktionen findest, bzw. wo du sie aktivierst)

Ciao,
_

ramonl
17-11-2004, 15:11
das sind jetzt viele themen parallel wo wir drüber reden...

hab schon wieder nen neues prob,da sbei nem jollegen bei gleicher auflösung die rechte box der statusbar nicht ganz mit drauf is,wo bei mir sogar noch bissl platz daneben ist, wie kann das denn sein ?

also irgendwie is das halt alles doof so,, also besser ne andere lösung...






Dafür brauchst du keinen Code.
Einfach im Designer unten noch einen QFrame in dein Hauptwidget geben, Eigenschaften auf NoFrame und Plain stellen, die Labels rein, Layouten, Layouteigenschaften entsprechend einstellen.




die stausBar die automatisch da is kann ich ja nicht löschen,richtig ?kann sie nur,wie du sagtest nicht beachten.

wenn ich im designer da unten aber nen label reinziehe, dann wirds von der "unsichtbaren" statusbar trotzdem überdeckt. ist da sbeim QFRame ( ist das direkt nen tool,wo find eich das da) nicht dann genauso ?


wa smeinst genau mit qframe ?

und du meinst in dem hauptfenster was ich ja als vollbild meine sprogramms habe,also das gross eprogrammfenster halt...

anda_skoa
18-11-2004, 18:53
hab schon wieder nen neues prob,da sbei nem jollegen bei gleicher auflösung die rechte box der statusbar nicht ganz mit drauf is,wo bei mir sogar noch bissl platz daneben ist, wie kann das denn sein ?

Womöglich andere DPI Einstellungen oder andere Fensterdektoration, etc.

"Nicht ganr drauf" sollte es ansich aber nicht geben, das klingt ziemlich nach fixkodierten Größen statt Layouts.



die stausBar die automatisch da is kann ich ja nicht löschen,richtig ?kann sie nur,wie du sagtest nicht beachten.

Wenn du nie statusBar() aufrufst, wird keiner erzeugt.



ist da sbeim QFRame ( ist das direkt nen tool,wo find eich das da) nicht dann genauso ?

QFrame ist unter "Container"



wa smeinst genau mit qframe ?

http://www.sbox.tugraz.at/home/v/voyager/statusframe.ui

Ciao,
_