【问题标题】:Qt GraphicsEllipseItem numberingQt GraphicsEllipseItem 编号
【发布时间】:2014-11-26 20:23:05
【问题描述】:

所以我正在构建这个应用程序,在该应用程序中单击 graphicsView,一个椭圆出现在我单击的确切位置。一切都很好,现在我想给这些椭圆编号。我想在椭圆内设置一个文本。就像,当我第一次在 graphicsView 上单击时,会出现一个椭圆,里面写着“1”,然后我再次单击其他地方,另一个椭圆出现,这次是文本“2”,依此类推...

【问题讨论】:

  • 欢迎来到stackoverflow。你已经很好地陈述了你的问题。看好你。如果您还发布了您现在拥有的工作代码,这样人们就可以更容易地了解您在设计中遇到的问题。你的这个椭圆你有一个类(从 QGraphicsItem 派生)来绘制它吗?

标签: qt qgraphicsview qgraphicsitem qgraphicsscene ellipse


【解决方案1】:

创建一个类来绘制椭圆,从 QGraphicsEllipseItem 派生(也许这已经完成了) 使用scene->addItem() 将椭圆插入场景中 用setpos()移动椭圆

在该类中创建一个静态成员 static int ellipse_count 并将其初始化为 0。每次创建椭圆时增加该计数器,并在每次销毁椭圆时减少它(将增加和减少计数器的代码放在构造函数和析构函数中)

您可以将一个成员作为 QGraphicsTextItem 添加到您的 ellipse 类中,然后创建该对象并将其放置在 ellipse 构造函数中。这样,您可以将 Text itemin 相对坐标放置在椭圆参照内,它会随椭圆移动。

【讨论】:

    【解决方案2】:

    void Widget::mousePressEvent(QMouseEvent *mouseEvent)
    {
        QPointF p = mouseEvent->localPos();
        if (mouseEvent->button() == Qt::LeftButton &&
            p.x() >= 20 && p.x() <= 780 && p.y() >= 20 && p.y() <= 780)
        {
            int l = 40;
            count++;
            elipse[count] = scene->addEllipse(p.x()-l/2-14, p.y()-l/2-14, l, l, QPen(Qt::black));
            elipse[count]->setFlags(QGraphicsEllipseItem::ItemIsMovable)    
        }
    }

    这就是函数。我想添加文本,不要忘记,该项目是可移动的,所以如果项目移动,文本也必须移动。

    编辑! 我想通了!

    void Widget::mousePressEvent(QMouseEvent *mouseEvent)
    {
        QPointF p = mouseEvent->localPos();
        if (mouseEvent->button() == Qt::LeftButton &&
            p.x() >= 20 && p.x() <= 780 && p.y() >= 20 && p.y() <= 780)
        {
            int l = 40;
            count++;
            elipse[count] = scene->addEllipse(p.x()-l/2-14, p.y()-l/2-14, l, l, QPen(Qt::black));
            elipse[count]->setFlags(QGraphicsEllipseItem::ItemIsMovable);
    
            enumbering[count] = scene->addSimpleText(QString::number(count));
            enumbering[count]->setPos(p.x()-l/2+3, p.y()-l/2-1);
    
            enumbering[count]->setParentItem(elipse[count]);
        }
    }

    【讨论】:

    • 不要用其他问题和编辑来回答您自己的问题。只需编辑您的问题
    • 好的,我想现在你的答案实际上是一个答案,所以没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多