Qt 4.4: Probleme bei Anzeige eines Bildes



  • Hallo!

    Ich habe hier eine Klasse "ImageDisplayer", die von Qt3 auf Qt4 umgestellt werden soll. Diese Klasse bekommt ein Bild übergeben und soll dieses auf einem Widget anzeigen. Schlussendlich wird aber garnichts angezeigt, das Widget bleibt grau. Hier eine stark vereinfachte Variante meiner Implementierung. Zunächst der entsprechende Aufruf im Hauptgramm:

    // ...
    QWidget *grid = new QWidget;
    // ...
    ImageDisplayer imageDisplayer (grid);
    imageDisplayer.doDisplayImage ();
    // ...
    

    Die Klasse ImageDisplayer ist von QWidget abgeleitet (class ImageDisplayer : public QWidget { // ... }). Soweit alles schön und gut, das entsprechende Widget wird angezeigt. Leider wird dort kein Inhalt dargestellt, was aber eigentlich durch die doDisplayImage-Methode geschehen sollte.

    void ImageDisplayer::doDisplayImage()
    {
    	// ...
    	m_pmScaled = QPixmap (m_image_width, m_image_height);
    	m_pmScaled.fill (Qt::red);
    	// ...
    
        repaint ();
    }
    

    m_pmScaled vom Typ QPixmap sollte jetzt also rot gefüllt sein und sich entsprechend zeichnen lassen. So wie ich das verstanden habe, wird durch repaint () ein paintEvent ausgelöst, welches entsprechend überschriben werden muss:

    void ImageDisplayer::paintEvent( QPaintEvent *e )
    {
    	cout << "paintEvent!" << endl;
    
        if ( m_display_it == true )
        {
            QPainter painter( this );
    
            painter.eraseRect( m_position_x, m_position_y,
                               m_position_x + m_display_width,
                               m_position_y + m_display_height );
    
            painter.drawPixmap( m_position_x, m_position_y, m_pmScaled );
        }
    }
    

    Auf dem Widget wird letztendlich garnichts angezeigt, was wohl daran liegen könnte, dass die zuletzt gezeigte Methode paintEvent garnicht aufgerufen wird (es kommt nicht zur eingefügten Kontrollausgabe). Tja, hier bleibe ich gerade stecken, unter Qt3 hat es noch funktioniert. Es sei noch angemerkt, dass die gezeigte Implementierung gegenüber der tatsächlichen stark vereinfacht wurde, um die Problematik aufzuzeigen. Natürlich will ich nicht ausschließlich rote Flächen darstellen.

    Vielen Dank für die Hilfe!



  • Das Problem hat sich klären lassen:

    Offenbar will auch das Widget, welches das Bild anzeigen soll und auf einem weiteren Widget liegt, einmal mit QWidget::show() aufgerufen werden. Bei Qt3 genügte es offenbar, selbiges nur beim parent-Widget zu tun.


Anmelden zum Antworten