문제
사용자 지정 위젯을 만들려고합니다. 내 위젯은 스크롤 영역 안에 있지 않으면 자체적으로 렌더링됩니다. 아래 코드는 작동합니다. 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를 통해 내 위젯이 사용 가능한 공간을 차지할 수있게되었습니다.
제휴하지 않습니다 StackOverflow