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 ...
Eigenes Widget dynamisch in der Größe an Layout anpassen?
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.
Vielen Dank für deine Mühe!
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 );
}
Jetzt versteh ich erst was du meinst. Du suchst das resizeEvent