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

Alles rund um die Programmierung mit Qt
Antworten
it-web
Beiträge: 3
Registriert: 17. Juni 2007 13:53

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

Beitrag 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 ...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dein Widget hast du aber schon dem Layout zugewiesen?
it-web
Beiträge: 3
Registriert: 17. Juni 2007 13:53

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Zeig mal Code...
it-web
Beiträge: 3
Registriert: 17. Juni 2007 13:53

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Jetzt versteh ich erst was du meinst. Du suchst das resizeEvent
Antworten