statusbar aufteilen in abschnitte (QT 4.1)

Alles rund um die Programmierung mit Qt
Antworten
scoobster
Beiträge: 5
Registriert: 13. März 2006 14:35

statusbar aufteilen in abschnitte (QT 4.1)

Beitrag von scoobster »

hallo

Ich kenne micht fast ger nicht aus mit Qt 4.1
Habe schon einiges rumgesucht aber kein beispiel gefunden.

Ich weis wie man in C++/mfc eine statusbar einrichtet und teilt wie hier:

Code: Alles auswählen

m_Statusbar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|SBARS_SIZEGRIP,CRect(0,0,0,0), this, IDC_STATUSBAR) ;
	m_Statusbar.EnableToolTips(true);
	CRect rect;
	m_Statusbar.GetClientRect(&rect);
	int widths[5] = { rect.right-675, rect.right-480, rect.right-250,rect.right-25, -1 };
	m_Statusbar.SetParts(5, widths);
	m_Statusbar.SetIcon(1,usericon);	
	m_Statusbar.SetIcon(2,transicons[0]);
	m_Statusbar.SetIcon(3,connicons[0]);
nur habe in an einem Beispiel in qt3.3 source gesehen aber es hilf mir nicht weiter.
Und demos bei qt trolltech habe ich kein beispiel gefunden für qt 4.1.

Und muss die aufteilungen in einer .cpp oder in einer header datei sein oder in eine .ui?

Weil in meinem project kommt in einer .ui datei dinge über statusbar auf.
wie:
widget class="QStatusBar" name="statusbar" >
<property name="geometry" >
<rect>
<x>0</x>
<y>578</y>
<width>818</width>
<height>22</height>
</rect>
</property>
</widget>

und zu diesem .ui die .cpp wo was auftaucht über statusbar:

Code: Alles auswählen

// Create the status bar
    statusBar()->showMessage( "" );

statusBar()->addPermanentWidget(connQuality);
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich hab's jetzt selber nicht ausprobiert, aber versuch es mal mit folgendem Code:

Code: Alles auswählen

statusBar()->addWidget(new QLabel("1"));
statusBar()->addWidget(new QLabel("2"));
statusBar()->addWidget(new QLabel("3"));
scoobster
Beiträge: 5
Registriert: 13. März 2006 14:35

Beitrag von scoobster »

ok

danke !
es geht und nun wie kann man es ausrichten ?
ab wann es beginnt?
ab wann das 1 beginnt das 2. 3 usw.

nur müssen die messages auch in diesen addwigets angezeigt werden und das conquality , weil nun wird es nicht mehr angezeigt.

Code: Alles auswählen

// Create the status bar
    statusBar()->showMessage( "" );

    
    statusBar()->addWidget(new QLabel("1"));
    statusBar()->addWidget(new QLabel("2"));
    statusBar()->addWidget(new QLabel("3"));

    // Connection quality monitor
    connQuality = new ConnectionQuality();
    connect(multiView, SIGNAL(connectionCountChanged(int )),
                         this, SLOT(connectionQuality(int )));

    statusBar()->addPermanentWidget(connQuality);

void Kom::showConnectionAttempt( QString attemptAddress, int attemptPort )
{
    statusBar()->showMessage( "Trying to connect to " + attemptAddress + ":" + QString::number( attemptPort ) + "...", 5000 );
}

void Kom::quit()
{
    statusBar()->showMessage(tr("Exiting application..."), 5000);
}
Bild

es wird dann von messages überdeckt:
Bild

wei kann man das addPermanentWidget

Code: Alles auswählen

statusBar()->addPermanentWidget(connQuality);
in das addWidget einbauen?

Code: Alles auswählen

statusBar()->addWidget(new QLabel("1"));
muss also wissen wie man festlegen kann das man
statusBar()->addWidget(new QLabel("1")); est bei 100 cm anfängt usw.
scoobster
Beiträge: 5
Registriert: 13. März 2006 14:35

Beitrag von scoobster »

ich habe da was gefunden aber bringt mir nichts weil es in qt 3.3. ist!

Code: Alles auswählen

void MainWin::initStatusBar()
{
    QWidget * w;
    QLabel * l;
    QHBoxLayout * b;
    QSizePolicy spPix(QSizePolicy::Maximum,QSizePolicy::Minimum);

    //Infos sur le hachage et le nombre de fichiers partages
    w = new QWidget(statusBar());
    b = new QHBoxLayout(w);
    text=new QLabel(w);
    text->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
    l = new QLabel(w);
    l->setPixmap(QPixmap::fromMimeSource("fileshare16.png"));
    l->setSizePolicy(spPix);
    b->addWidget(l);
    b->addWidget(text);
    statusBar()->addWidget(w,1,true);

    //Infos sur la bande passante utilisee
    w = new QWidget(statusBar());
    b = new QHBoxLayout(w);
    b->setSpacing(5);
    b->setMargin(3);
    b->addSpacing(2);
    l = new QLabel(w);
    l->setPixmap(QPixmap::fromMimeSource("down.png"));
    l->setSizePolicy(spPix);
    b->addWidget(l);
    dwlbl = new QLabel(w);
    dwlbl->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
    dwlbl->setText(tr("Réc.")+" : 0.0 Ko/s");
    b->addWidget(dwlbl);
    b->addSpacing(8);
    l = new QLabel(w);
    l->setText("|");
    l->setSizePolicy(spPix);
    b->addWidget(l);
    b->addSpacing(8);
    l = new QLabel(w);
    l->setPixmap(QPixmap::fromMimeSource("up.png"));
    l->setSizePolicy(spPix);
    b->addWidget(l);
    uplbl = new QLabel(w);
    uplbl->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
    uplbl->setText(tr("Env.")+" : 0.0"+(!gconf->conSpeed()?"":"/"+QString::number(gconf->conSpeed())+".0")+" Ko/s");
    b->addWidget(uplbl);
    b->addSpacing(2);
    statusBar()->addWidget(w,0,true);

    nbuserslbl = new QLabel(statusBar());
    nbuserslbl->setText(" 1 "+tr("utilisateur")+" ");

    statusBar()->addWidget(nbuserslbl,0,true);
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Also ich hab ja eigentlich nichts dagegen wenn man sich auch hin und wieder die Dokumentation zur Gemüte führt. Ich mach hier ja auch nichts anderes als die ganzen Fragen mithilfe der Dokumentation zu beantworten.

Code: Alles auswählen

QStatusBar::addWidget(QWidget *widget, int stretch=0)
hat ja einen zusätzlichen Parameter. Hast du den schon mal ausprobiert?
scoobster
Beiträge: 5
Registriert: 13. März 2006 14:35

Beitrag von scoobster »

wenn ich den code einsetze kommt ein fehler:
kom.cpp: In constructor `Kom::Kom(QWidget*)':
kom.cpp:110: error: expected primary-expression before '*' token
kom.cpp:110: error: `widget' undeclared (first use this function)
kom.cpp:110: error: (Each undeclared identifier is reported only once for ea
ch function it appears in.)
kom.cpp:110: error: expected primary-expression before "int"
kom.cpp:111: error: expected `;' before "statusBar"
mingw32-make[1]: *** [release\kommute.o] Error 1
mingw32-make[1]: Leaving directory `C:/msys/1.0/home/Linux/komQT4/src'
mingw32-make: *** [release] Error 2
Antworten