Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : toolbar will nicht



Schlaftänzer
03-08-2005, 00:54
hi qtjunks

Mein Problem ist, das ich gern ein Menü, eine Toolbar, ein Scrollview und ein Textfeld in einem Programm hätte.

In einem QWidget(child) sollen Textfelder angelegt werden.
Und MainWindow(parent) ist für die Menüfelder, Toolbars und Scrollview verantwortlich.

So weit bin ich:
Das Programm verfügt im fertigen zustand über ein Menü und eine Toolbar. Will ich aber zusätzlich ein Scrollview hinzufügen was das Qwidget(child) in das MainWindow mittels


scrollview->addchild(eingabefeld);

einbindet, verschwindet die Toolbar im fertigen Programm. Das Menü bleibt aber und das Textfeld erscheind auch.

Warum verschwindet die Toolbar? Wird sie evtl. vom childwidget überdeckt?

Hier mal noch der code:


/************************************************** *********************/
#include <qapplication.h>
#include <qwidget.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qmenubar.h>
#include <qscrollview.h>
#include <qpixmap.h>
#include <qmainwindow.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
/************************************************** *********************/
const char * dateiNeuText =
"Klicke auf diesen Button, um ein neues Fenster zu erzeugen."
"Dies ist auch moeglich mit dem <b>Neu-Menueeintrag </b>"
" vom Datei-Menue.";
/************************************************** *********************/
class Eingabefeld : public QWidget
{
Q_OBJECT
public:
Eingabefeld();

private:
QLineEdit *firmaE;
};
/************************************************** *********************/
class Menue : public QMainWindow
{

Q_OBJECT

public:
Menue();

signals:
void anzeige( const QString& );

private slots:
void neu() { emit anzeige( "Datei/Neu" ); }

private:
QMenuBar* menubalken;
QPopupMenu* dateimenu;
QScrollView* scrollview;
Eingabefeld* eingabefeld;
QToolBar* dateiTools;
QPixmap neuP;

void erzeugeToolBars( void );

protected:
virtual void resizeEvent( QResizeEvent* ) {
scrollview->setGeometry( 0, menubalken->height(),
width(), height() - menubalken->height() );
}
};
/************************************************** *********************/
#include "test.moc"
/************************************************** *********************/
Eingabefeld::Eingabefeld() : QWidget() {
firmaE = new QLineEdit( this );
firmaE->setGeometry( 60, 30, 260, 20);

QLabel* label1 = new QLabel( "Firma:", this );
label1->setGeometry( 10, 30, 40, 20);
}
/************************************************** *********************/
Menue::Menue() : QMainWindow (0,"Beispiel zu QMainWindow") {
neuP = QPixmap( "filenew.xpm" );

erzeugeToolBars();

QPopupMenu *datei = new QPopupMenu( this );
datei->insertItem( neuP, "&Neu", this, SLOT(neu()), CTRL+Key_N );

menubalken = new QMenuBar( this );
menubalken->insertItem( "&Datei", datei );

eingabefeld = new Eingabefeld();
eingabefeld->setGeometry( 0, 0, 500, 500 );

scrollview = new QScrollView( this );

scrollview->addChild( eingabefeld );
}
/************************************************** *********************/
void Menue::erzeugeToolBars( void ) {
dateiTools = new QToolBar( this );

QToolButton * dateiNeu = new QToolButton(
neuP, "Neue Datei", QString::null,
this, SLOT(neu()), dateiTools );

QToolTipGroup * dt = new QToolTipGroup( dateiTools );
QToolTip::add( dateiNeu, "Neue Datei",
dt, "Legt ein neues Fenster an");

(void)QWhatsThis::whatsThisButton( dateiTools );
QWhatsThis::add( dateiNeu, dateiNeuText );

dateiTools->show();
}
/************************************************** *********************/
int main( int argc, char *argv[] )
{
QApplication myapp( argc, argv );

Menue *mywidget = new Menue();
mywidget->setGeometry( 50, 50, 400, 100 );

myapp.setMainWidget( mywidget );
mywidget->show();
return myapp.exec();
}
/************************************************** *********************/


Beschäftige mich erst seit ein paar Wochen mit Qt. Also totaler Newbie, der euro Hilfe sucht. ;)

Danke

Gruß Jürgen

anda_skoa
03-08-2005, 18:33
Den Hauptview als CentralWidget setzen:


scrollview = new QScrollView(this);
setCentralWidget(scrollview);


Das Erzeugen und Speichern des MenuBar kannst du dir schenken, dafür gibt es in QMainWindow die Methode menuBar().
Die erzeugt beim ersten Aufruf den MenuBar und gibt dann diese Instanz bei allen weiteren Aufrufen zurück.

Statt expliziten addChild Aufruf verwendet man üblicherweise die Übergabe des Parent im Konstruktor, du brauchst ansich nur im Konstruktor von EingabeFeld einen QWidget Pointer übernehmen und direkt an den QWidget Konstruktor weiterreichen.

Ciao,
_

Schlaftänzer
03-08-2005, 20:05
Danke für deine nett gemeinte Hilfe, aber schnallen tu ich rein garnichts. Ich seh schon, ich muß das QT-Buch von vorn bis hinten durcharbeiten ansonsten werd ich aus dem ganzen Zeug hier nicht schlau.

Könntest du mir vielleicht trotzdem ein kleines Beispiel zu diesem genannten Punkt geben. Den Rest versuch ich mir dann aus dem Buch zu erarbeiten.


Statt expliziten addChild Aufruf verwendet man üblicherweise die Übergabe des Parent im Konstruktor, du brauchst ansich nur im Konstruktor von EingabeFeld einen QWidget Pointer übernehmen und direkt an den QWidget Konstruktor weiterreichen.
_
Danke

Gruß Jürgen

anda_skoa
04-08-2005, 11:12
Könntest du mir vielleicht trotzdem ein kleines Beispiel zu diesem genannten Punkt geben.

Zum MenuBar?



QPopupMenu *datei = new QPopupMenu( this );
datei->insertItem( neuP, "&Neu", this, SLOT(neu()), CTRL+Key_N );

menuBar()->insertItem( "&Datei", datei );


Ciao,
_

Schlaftänzer
04-08-2005, 19:13
Super Danke :)

Gruß Jürgen