[英]Show custom widget into layout
我想将我的自定义小部件放入布局并在另一个小部件中显示。 我可以将我的小部件作为第二个(容器)小部件的子部件,它可以正常工作,但是如果我将它放入第二个(容器)小部件的布局中,它就会失败。 我创建了一个简单的例子来描述它。
标题
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();
如果构造看起来像这样,则什么也不会发生:
Qwidget container;
MyQwidget custom;
Qlayout layout;
layout.addWidget(custom);
container.addLayout(layout);
container.show();
是否有任何正确的方法将自定义子类小部件放入布局中?
旁注:通过让布局知道它作用于哪个小部件,您的main
可以缩短一行,如下所示:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget container;
QVBoxLayout layout(&container);
MyClass customWidget;
layout.addWidget(&customWidget);
container.show();
return a.exec();
}
我找到了答案。 我将仔细实现sizeHint()
。 很明显 C++ 错误,忘记了const
。 正确的实现方法:
QSize MyClass::sizeHint() const { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.