我想將我的自定義小部件放入佈局中,並在另一個小部件中顯示此部件。我可以將我的小部件作爲第二個(容器)小部件的子項,並且它工作正常,但是如果我將它放入第二個(容器)小部件的佈局中,它將失敗。我已經創建了一個簡單的例子來描述它。在佈局中顯示自定義小部件
頁眉
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();
}
實例總結:
如果我使用建築像這樣一切就OK了:
Qwidget container;
MyQwidget custom(&container);
container.show();
如果建築看起來像這樣,沒什麼g發生:
Qwidget container;
MyQwidget custom;
Qlayout layout;
layout.addWidget(custom);
container.addLayout(layout);
container.show();
是否有任何正確的方法將自定義子類小部件放入佈局?
如果你的編譯器是兼容I如果你不覆蓋虛函數,建議使用C++ 11'override'關鍵字來獲得編譯器反饋。 – OnWhenReady
@DominikSelzer更好:如果編譯器是C++ 11,不用擔心,而是使用'Q_DECL_OVERRIDE'。 –