내 맞춤 위젯을 레이아웃에 넣고 다른 위젯에 표시하고 싶습니다. 내 위젯을 두 번째 (컨테이너) 위젯의 자식으로 넣을 수는 있지만 괜찮습니다.하지만 두 번째 (컨테이너) 위젯의 레이아웃에 넣으면 실패합니다. 그것을 설명하기 위해 간단한 예제를 만들었습니다.레이아웃에 사용자 정의 위젯 표시
헤더
class MyClass : public QAbstractButton
{
Q_OBJECT
public:
explicit MyClass(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
QSize sizeHint();
QSize minimumSizeHint();
};
소스
#include <QApplication>
#include <QAbstractButton>
#include <QDebug>
#include <QPainter>
#include <QVBoxLayout>
MyClass::MyClass(QWidget *parent) :
QAbstractButton(parent)
{
setGeometry(10,10, 200, 200);
}
void MyClass::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen myPen;
myPen.setWidth(5);
painter.drawRect(QRect(QPoint(5, 5), QSize(190, 190)));
}
QSize MyClass::sizeHint() {
qDebug() << "sizeHint";
return QSize(200, 200);
}
#define OK
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget container;
QVBoxLayout layout;
MyClass customWidget;
#ifdef OK
// It works, but I want the same behaviour with layout
customWidget.setParent(&container);
#else
// Doesn't work,
layout.addWidget(&customWidget);
container.setLayout(&layout);
#endif
container.show();
return a.exec();
}
예 요약 :
나는 확인이 모두 같은 구성을 사용하는 경우 :
Qwidget container;
MyQwidget custom(&container);
container.show();
건설이 보이는 경우, 아무것도 g가 발생합니다.
Qwidget container;
MyQwidget custom;
Qlayout layout;
layout.addWidget(custom);
container.addLayout(layout);
container.show();
레이아웃에 맞춤 하위 분류 된 위젯을 삽입하는 적절한 방법이 있습니까?
경우 가상 함수를 오버라이드하지 않는다면 C++ 11의'override' 키워드를 사용하여 컴파일러 피드백을 얻는 것을 제안하십시오. – OnWhenReady
@DominikSelzer 더 나은 점은 컴파일러가 C++ 11이면 걱정하지 말고 대신'Q_DECL_OVERRIDE'를 사용하십시오. –