我正在尝试创建一个应用程序,用户可以在其中输入一些图形(手势),然后将其保存并显示在屏幕顶部的图库中:
当用户按下“验证”时,图形应显示在顶部的滚动区域上。但是,出于某种原因,我的代码没有按照我的意图运行。它可以毫无问题地保存绘图,但是当我告诉它将它添加到顶部时,没有任何反应。
代码在这里:
void MainWindow::galleryUpdate()
{
for (int i = 0; i < gestureTemplates.size(); i++)
{
QPolygonF scaledGesture = gestureTemplates[i].scaleToSquare(gestureTemplates[i]);
StrokeDrawer * strD = new StrokeDrawer();
QPalette Pal(palette());
Pal.setColor(QPalette::Background, Qt::white);
strD->setMinimumSize(50, 50);
strD->setAutoFillBackground(true);
strD->setPalette(Pal);
galleryList.append(strD);
topZone->addWidget(strD);
strD->setStroke(scaledGesture);
}
}
gestureTemplates
是包含所有图纸的GestureTemplate
(继承自QPolygonF
的自定义类)的向量。 for
中的第一行只是缩放图形以适合方形,并返回QPolygonF
。
StrokeDrawer
是用于显示绘图的类(下面的代码)。然后我尝试用白色背景填充它,将其保存到galleryList
,这是每个绘图的StrokeDrawer
列表,然后使用topZone->addWidget(strD)
将其添加到顶部,其中topZone
是HBoxLayout
。
我还使用setStroke
方法将绘图设置为StrokeDrawer
(此方法还调用类中的update()
函数,该函数调用其paintEvent
,这应该注意实际绘制QPolygonF
)。
最初,我尝试直接使用addWidget
来QPolygonF
,但这不起作用。这就是为什么我使用这个StrokeDrawer
类(只显示绘图,它甚至不允许对其进行更改)。
通过调试QtCreator上的代码,一切正常,直到addWidget
行,没有任何反应。我的意思是,即使图形没有正确显示,它应该至少显示一个小的白色50x50正方形,或者我在这里遗漏了什么?
StrokeDrawer
的一些代码:
void StrokeDrawer::setStroke(QPolygonF g)
{
gesture = g;
update();
}
void StrokeDrawer::paintEvent(QPaintEvent* e)
{
QWidget::paintEvent(e);
QPainter pait(this);
if (!gesture.empty())
pait.drawPolyline(gesture);
}