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 Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie müssen nur geben Sie Ihre HelloWidget eine Größe und Ort.
Fügen Sie diese Zeile, um Ihren code.
Oder, wenn Sie wollen, füllen Sie den scroll-Bereich, mit Ihr widget:
InformationsquelleAutor TimW
Pro Qt-Doku, Wenn Sie eine scroll-Bereich, um die Inhalte anzuzeigen, die von einem benutzerdefinierten widget, es ist wichtig, um sicherzustellen, dass die Größe Hinweis-das Kind-widget gesetzt, um einen geeigneten Wert. Wenn ein standard-QWidget verwendet wird, für das Kind-widget, kann es notwendig sein, rufen QWidget::setMinimumSize (), um sicherzustellen, dass der Inhalt des widgets angezeigt werden korrekt in den scroll-Bereich."
Funktioniert es Recht, wenn Sie diese Anweisungen befolgen?
InformationsquelleAutor Alex Martelli
Ich zog meine Haare über dies auch, aber schließlich gefunden, die QScrollArea ist setWidgetResizable, die die QScrollArea zulassen, dass mein widget zu erweitern, um den verfügbaren Platz.
InformationsquelleAutor Dwayne