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
Vous devez vous connecter pour publier un commentaire.
Vous suffit de donner votre HelloWidget une taille et le lieu.
Ajoutez cette ligne à votre code.
Ou si vous voulez remplir la zone de défilement avec votre widget:
OriginalL'auteur TimW
Par Qt docs, "Lors de l'utilisation d'une zone de défilement pour afficher le contenu d'un widget personnalisé, il est important de s'assurer que la taille de la pointe de l'enfant widget est définie sur une valeur appropriée. Si une norme QWidget est utilisé pour l'enfant widget, il peut être nécessaire d'appeler QWidget::setMinimumSize() pour s'assurer que le contenu du widget sont affichés correctement dans la zone de défilement."
Cela fonctionne si vous suivez ces instructions?
OriginalL'auteur Alex Martelli
Je tirais mes cheveux plus ce aussi, mais a finalement trouvé QScrollArea de setWidgetResizable, qui fait de la QScrollArea permettre à mon widget de l'étendre à prendre l'espace disponible.
OriginalL'auteur Dwayne