Qt - 将图形添加到布局

时间:2016-04-13 12:44:32

标签: c++ qt

我正在尝试创建一个应用程序,用户可以在其中输入一些图形(手势),然后将其保存并显示在屏幕顶部的图库中:

enter image description here

当用户按下“验证”时,图形应显示在顶部的滚动区域上。但是,出于某种原因,我的代码没有按照我的意图运行。它可以毫无问题地保存绘图,但是当我告诉它将它添加到顶部时,没有任何反应。

代码在这里:

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)将其添加到顶部,其中topZoneHBoxLayout。 我还使用setStroke方法将绘图设置为StrokeDrawer(此方法还调用类中的update()函数,该函数调用其paintEvent,这应该注意实际绘制QPolygonF)。

最初,我尝试直接使用addWidgetQPolygonF,但这不起作用。这就是为什么我使用这个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);
}

0 个答案:

没有答案