Qt: widget Personnalisé dans QScrollArea

Je tente de créer un widget personnalisé. Mon Widget rend elle-même, sauf si elle est à l'intérieur d'une zone de défilement. Le code ci-dessous fonctionne. Si je change le si(0) à une(1) à l'intérieur du constructeur de MainWindow, il ne rendra pas le "Hello World" de la chaîne. Je suppose que je dois (re)mettre en œuvre certaines des méthodes supplémentaires, mais jusqu'à présent, je n'ai pas été en mesure de trouver les bonnes avec essais et erreurs.

//hellowidget.h
#ifndef HELLOWIDGET_H
#define HELLOWIDGET_H

#include <QtGui>

class HelloWidget : public QWidget
{
    Q_OBJECT
public:
    HelloWidget(QWidget *parent = 0);
    void paintEvent(QPaintEvent *event);
};

#endif //HELLOWIDGET_H

//hellowidget.cpp
#include "hellowidget.h"
HelloWidget::HelloWidget(QWidget *parent)
: QWidget(parent)
{
}
void HelloWidget::paintEvent(QPaintEvent *event)
{
     QPainter painter(this);
     painter.drawText(rect(), Qt::AlignCenter, "Hello World");
}

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
};

#endif //MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
#include "hellowidget.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    HelloWidget *hello = new HelloWidget;
    QWidget *central = hello;

    if( 0 )
    {
        QScrollArea *scroll = new QScrollArea ;
        scroll->setWidget(hello);
        central = scroll;
    }

   setCentralWidget( central );
}

MainWindow::~MainWindow()
{
}

//main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
Est votre paintEvent fonction appelée? Je mettrais un qDebug() exposé, ou la rupture d'un débogueur. Si elle n'est pas appelée à tous, je pense que c'est probablement un problème de dimensionnement, encore. Essayez de ré-la mise en œuvre de resizeEvent() et voir ce que les tailles de widget est définie. Je parie qu'il n'est jamais être plus grand que (0, 0), ce qui voudrait dire qu'il n'y avait rien à tirer.

OriginalL'auteur user99974 | 2009-06-16