Qt: Custom-widget in QScrollArea

Ich bin versucht, erstellen Sie eine benutzerdefiniertes widget. Mein Widget rendert selbst, es sei denn, es ist im inneren ein scroll-Bereich. Der code unten funktioniert. Wenn ich die wenn(0) ein if(1) innerhalb der MainWindow-Konstruktor, es wird nicht machen Sie die "Hallo Welt" - string. Ich nehme an, ich muss die (re -) implementieren, die einige zusätzliche Methoden, aber so weit ich habe nicht in der Lage zu finden, die richtigen sind, mit Versuch und Irrtum.

//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();
}
Ist Ihre Funktion paintEvent aufgerufen wird? Würde ich eine qDebug () - Anweisung drin, oder Bruch in einen debugger. Wenn es nicht genannt wird, an alle, ich würde denken, dass es wahrscheinlich ein sizing-Problem immer noch. Versuchen Sie, re-Implementierung von resizeEvent() und sehen, welche Größen das widget gesetzt wird. Ich würde vermuten, es ist nie festgelegt wird, die größer als (0, 0), was bedeuten würde, es gab nichts zu zeichnen.

InformationsquelleAutor user99974 | 2009-06-16

Schreibe einen Kommentar