Seite 1 von 1

Eigenes Widget dynamisch in der Größe an Layout anpassen?

Verfasst: 17. Juni 2007 13:59
von it-web
Hallo,

ich habe ein kleines Programm, das ein QVBoxLayout verwendet.
In diesem Layout befindet sich ein PushButton und ein selbstgeschriebenes Widget, das sich natürlich von QWidget ableitet.

Ich habe bereits die Funktionen SizeHint und MinimumSizehint implementiert, und das Layout hält sich auch sehr schön daran.
Mein Problem ist aber jetzt, dass ich nicht weiß, wie meinem widget mitgeteilt wird, das sich die Größe ändern soll.
d.h. wenn ich die größe des programmfensters ändere wird zwar der button in der größe angepasst, aber der inhalt meines widgets wird abgeschnitten.
Welche funktion muss ich reimplementieren um die größenänderung abzufangen und darauf zu reagieren?
ich hab's bereits mit resize und setGeometrie versucht, die werden aber anscheinend nicht aufgerufen.

Vielen Dank,
David

PS: die examples and tutorials von trolltech habe ich schon durchsucht, aber irgendwie machen die nur widgets mit fester größe. oder ich hab was überlesen ...

Verfasst: 17. Juni 2007 18:52
von upsala
Dein Widget hast du aber schon dem Layout zugewiesen?

Verfasst: 17. Juni 2007 18:57
von it-web
Ja, hab ich.
Und sobald ich in meinem widget ein setLayout verwende und darin erst den eigtl inhalt platziere geht auch alles.

Ich will dieses zusätzliche layout aber vermeiden, irgendwie muss ich doch auch direkt im widget abfangen können, wenn sich die größe ändern sollte.

Verfasst: 17. Juni 2007 20:43
von upsala
Zeig mal Code...

Verfasst: 17. Juni 2007 21:11
von it-web
Hier sieht man was ich meine.
Am anfang wird die sizeHint beachtet und beim verkleinern des fensters wird auch die minimumSizeHint korrekt gelesen.
Nur kann ich nicht abfragen wie mir das layout die neue größe mitteilt.

Code: Alles auswählen

#include <QtGui>


class MainWindow : public QWidget
{
  public:
    MainWindow( QWidget *parent = 0 );
};


class MyWidget : public QLabel
{
  public:
    MyWidget( QWidget *parent = 0 );
    QSize sizeHint() const;
    QSize minimumSizeHint() const;
    void setGeometry( const QRect &rect );
    void setGeometry( int x, int y, int w, int h );
    void resize( int w, int h );
    void resize( const QSize & );
};


int main(int argc, char *argv[])
{
  QApplication application(argc, argv);
  MainWindow mainWindow;
  mainWindow.show();

  return application.exec();
}


MyWidget::MyWidget( QWidget *parent )
    : QLabel( parent )
{
  setText( tr( "Hello World!" ) );
}

QSize MyWidget::sizeHint() const
{
  return QSize( 300, 500 );
}

QSize MyWidget::minimumSizeHint() const
{
  return QSize( 100, 50 );
}

void MyWidget::setGeometry( const QRect &rect )
{
  setText( tr( "geometry-qrect" ) );
}
void MyWidget::setGeometry( int x, int y, int w, int h )
{
  setText( tr( "geometry-int" ) );
}
void MyWidget::resize( const QSize & )
{
  setText( tr( "resize-qsize" ) );
}
void MyWidget::resize( int w, int h )
{
  setText( tr( "resize-int" ) );
}


MainWindow::MainWindow( QWidget *parent )
    : QWidget( parent )
{
  QGridLayout *mainLayout = new QGridLayout;
  setLayout(mainLayout);

  QPushButton *button = new QPushButton( tr( "Klick mich!" ), this );
  mainLayout->addWidget( button );

  MyWidget *widget = new MyWidget( this );
  mainLayout->addWidget( widget );
}

Vielen Dank für deine Mühe!

Verfasst: 17. Juni 2007 21:52
von upsala
Jetzt versteh ich erst was du meinst. Du suchst das resizeEvent