문제

사용자 지정 위젯을 만들려고합니다. 내 위젯은 스크롤 영역 안에 있지 않으면 자체적으로 렌더링됩니다. 아래 코드는 작동합니다. if (0)을 MainWindow 생성자 내부의 if (1)로 변경하면 "Hello World"문자열을 렌더링하지 않습니다. 나는 몇 가지 추가 방법을 구현해야한다고 가정하지만 지금까지는 시행 착오로 올바른 방법을 찾을 수 없었습니다.

// 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();
}
도움이 되었습니까?

해결책

당신은 당신의 hellowidget에 크기와 장소를 주어야합니다.

이 줄을 코드에 추가하십시오.

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



또는 스크롤 영역을 위젯으로 채우려면 :

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

다른 팁

QT 문서, "스크롤 영역을 사용하여 사용자 정의 위젯의 내용을 표시 할 때, 하위 위젯의 크기 힌트가 적합한 값으로 설정되어 있는지 확인하는 것이 중요합니다. 하위 위젯에 표준 QWIDGET을 사용하는 경우 위젯의 내용이 스크롤 영역 내에 올바르게 표시되도록 qwidget :: setminumpice size ()를 호출해야합니다. "

이 지침을 따르면 올바르게 작동합니까?

나는 이것을이 위로 끌어 내고 있었지만 결국 Qscrollarea의 setWidgetResizable, Qscrollarea를 통해 내 위젯이 사용 가능한 공간을 차지할 수있게되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top