为什么我不能将我的小部件添加到布局中?它就像添加小部件的example一样...... 我的目标是绘制一个小的QWidget,其目的只是为了保持那个绘制的元素。
void Note::paintEvent(QPaintEvent *event)
{
paintExample = new(QWidget);
paintExample->setGeometry(500,500,500,500);
paintExample->setStyleSheet("background:yellow");
QImage *arrowImg = new QImage(100,100,QImage::Format_RGB32);
QHBoxLayout *lay = new QHBoxLayout;
lay->addWidget(arrowImg); //Error: no matching function for call to 'QHBoxLayout::addWidget(QImage*&)'
paintExample->setLayout(lay);
QPainter painter(arrowImg); //Must paint on QImage/QPixmap/QPicture, QWidget not possible?
if (painter.isActive()){
painter.begin(arrowImg);
painter.setPen(Qt::black);
QRect rect = QRect(50,25,60,40);
painter.drawRect(rect);
painter.end();
}
paintExample->show();
}
在私有区域的类标题中:
QWidget * paintExample;
答案 0 :(得分:1)
仔细阅读文档:
现在,还有其他问题:
paintEvent()
中创建无父对象而不删除它们。不仅可以经常调用这种方法,这种绘画方法根本不好。据我所知,Note
已经是一个QWidget,因此您可以使用QPainter painter(this);
立即在其上绘画。paintEvent()
中完成,也不是要显示/隐藏小部件。在其他地方这样做,例如在你的窗口/对话框构造函数中。 答案 1 :(得分:0)
为什么我无法将我的小部件添加到布局中?
因为QImage
不是QWidget
。这就是原因。您应该将图像包装在QLabel
:
QLabel arrowLabel;
arrowLabel.setPixmap(QPixmap::fromImage(*arrowImg));
并将其传递给布局:
lay->addWidget(arrowLabel);