QT开发中文网

QT怎么给painter画出来的线,闪起来

可以使用QTimer类在一定的时间间隔内反复重绘线条,从而实现闪烁效果。具体操作步骤如下:

  1. 在构造函数中创建一个QTimer对象,并设置其时间间隔和单次超时后要执行的槽函数。

  2. 在paintEvent()函数中,绘制线条前判断当前是否需要闪烁,如果需要,则不绘制该线条,否则正常绘制。

  3. 在槽函数中,通过控制一个标志位来实现闪烁的效果,即每次执行槽函数时将标志位取反,并调用update()函数触发重绘事件。

示例代码如下:

// 头文件声明
class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

protected:
    void paintEvent(QPaintEvent *event) override;

private slots:
    void onTimeout();

private:
    QTimer *m_pTimer;
    bool m_bShowLine;   // 闪烁标志位
};

// cpp文件实现
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    m_pTimer = new QTimer(this);
    m_pTimer->setInterval(500);     // 设置500ms的时间间隔
    connect(m_pTimer, &QTimer::timeout, this, &MyWidget::onTimeout);

    m_bShowLine = true;             // 初始化为显示状态
}

MyWidget::~MyWidget()
{
}

void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::black, 2, Qt::SolidLine));

    if (m_bShowLine)                // 判断是否需要绘制线条
    {
        painter.drawLine(10, 10, 100, 100);
    }

    // 其他绘制代码...
}

void MyWidget::onTimeout()
{
    m_bShowLine = !m_bShowLine;     // 取反标志位
    update();                       // 触发重绘事件
}

在上述示例代码中,每隔500ms就会执行一次槽函数onTimeout(),该函数将闪烁标志位取反,并调用update()函数触发重绘事件。而在paintEvent()函数中,如果当前标志位为true,即需要显示线条,则正常绘制;否则不绘制,从而实现了闪烁效果。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=648

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?