Domanda

Sto tentando di creare un widget personalizzato. Il mio Widget per sé rende meno che non sia all'interno di una zona di scorrimento. Il seguente codice funziona. Se cambio la if (0) per un caso (1) all'interno del costruttore MainWindow, esso non rendere la stringa "Ciao Mondo". Suppongo che devo (ri) mettere in atto alcuni metodi aggiuntivi, ma finora non sono stato in grado di trovare quelle corrette con tentativi ed errori.

// 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();
}
È stato utile?

Soluzione

Non vi resta che dare il vostro HelloWidget una dimensione e posizione.

Aggiungi questa riga al codice.

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


O se si vuole riempire l'area di scorrimento con il tuo widget:

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 );
}

Altri suggerimenti

Qt docs , "Quando si utilizza una superficie di scorrimento per visualizzare il contenuto di un widget personalizzato, è importante assicurarsi che il suggerimento dimensioni del widget figlio è impostato su un valore adeguato. Se un QWidget standard è utilizzato per il widget figlio, potrebbe essere necessario chiamare QWidget :: setMinimumSize () per garantire che il contenuto del widget vengono visualizzati correttamente all'interno della zona di scorrimento ".

Funziona bene se si seguono le istruzioni?

stavo tirando fuori i miei capelli su questo anche, ma alla fine ho trovato setWidgetResizable , che ha reso la mia QScrollArea permettono widget per espandersi a prendere lo spazio a disposizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top