如何在Qt中的qgraphicsrectitem中制作自动收报机

时间:2014-09-01 11:56:27

标签: c++ linux qt

如何在Qt中的qgraphicsrectitem中制作自动收报机 我试过跟随

rect = new QGraphicsRectItem;
    text = new QGraphicsTextItem;

    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    rect = scene->addRect(0,0,500,500);
    text->setPlainText("HELLO from constructor");
    scene->addItem(text);

    QFont font;
    fm = new QFontMetrics(font);
    ntextWidth = fm->width(text->toPlainText());
    text->setPos(0,rect->boundingRect().height()/2);
    ntextHeight = fm->height();
    QString strtxt = fm->elidedText(text->toPlainText(), Qt::ElideRight, ntextWidth-50, Qt::TextShowMnemonic);
    qDebug() << "Here Lenght in pixels:" << ntextWidth <<"====" <<ntextHeight <<"-----"<<strtxt.contains("…");

    connect(&timer, SIGNAL(timeout()),this,SLOT(update()));
    timer.start(5);
}

GraphicsTicker::~GraphicsTicker()
{
    delete ui;
}

void GraphicsTicker::update()
{
    text->setPos(text->x()+1,text->y());
    if(text->x()==rect->boundingRect().width()-ntextWidth)
    {
        ntextWidth = ntextWidth-1;
        strNewText = fm->elidedText(text->toPlainText(),Qt::ElideRight,ntextWidth).remove("…");
        text->setPlainText(strNewText);
    }
    if(text->x() == rect->boundingRect().width()-20)
    {
        text->setPlainText("HELLO from constructor");
        ntextWidth = fm->width(text->toPlainText());
        text->setPos(0,text->y());
    }

我已经使用了qgraphicstextitem和qgraphicsrectitem。 我移动文本取决于使用计时器的rect的位置。 但它并不像Ticker那样完美 请给我一个聪明的解决方案

先谢谢

2 个答案:

答案 0 :(得分:0)

我在Qt中完成了自动收报机。 我只是简单地使用Qlable并使用它旋转文本,然后我在Qgraphicsscene中添加了这个标签和Qgraphicsproxywidget。 谢谢你们。

答案 1 :(得分:0)

您可以通过使用Qpropertyanimation简单地将Qlable添加到窗口小部件并设置其开始和结束值以使其看起来像股票代码正在移动。对于这个标签的“几何”,考虑移动