Frage

Ich versuche, eine benutzerdefinierte Widget zu erstellen. Mein Widget macht sich, wenn es in einem Scroll-Bereich ist. Der folgende Code funktioniert. Wenn ich ändern, um die if (0) auf ein, wenn (1) innerhalb des Mainwindow-Konstruktor, wird es nicht die „Hallo Welt“ string machen. Ich gehe davon aus, dass ich muß (wieder) einige zusätzliche Methoden implementieren, aber bisher habe ich nicht in der Lage gewesen, die richtigen ist mit Versuch und Irrtum zu finden.

// 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();
}
War es hilfreich?

Lösung

Sie müssen nur geben Sie Ihre HelloWidget eine Größe und Ort.

Fügen Sie diese Zeile Code.

hello->setGeometry(QRect(110, 80, 120, 80)); 



Oder wenn Sie den Scroll-Bereich mit dem Widget füllen:

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
    QScrollArea *const scroll(new QScrollArea);
    QHBoxLayout *const layout(new QHBoxLayout(scroll)); 
    HelloWidget *const hello(new HelloWidget);
    hello->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
    layout->addWidget(hello);
    setCentralWidget( scroll );
}

Andere Tipps

Qt docs : „Wenn ein Scroll-Bereich unter Verwendung zum Anzeigen des Inhalt eines benutzerdefinierten Widget, ist es wichtig, dass die Größe Hauch des Kindes Widget auf einen geeigneten Wert eingestellt ist, um sicherzustellen. Wenn ein Standard QWidget für das Kind-Widget verwendet wird, kann es notwendig sein QWidget :: setMinimumSize () zu nennen sicherzustellen, dass der Inhalt des Widgets korrekt im Scroll-Bereich gezeigt. "

Funktioniert es richtig, wenn Sie diese Anweisungen befolgen?

Ich zog mir die Haare darüber hinaus auch, fand aber schließlich QScrollArea der setWidgetResizable , die die QScrollArea gemacht erlauben mein Widget den verfügbaren Platz zu nehmen zu erweitern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top