QT开发中文网

希望能够在普通函数而非事件里实现painter画图

在普通函数而非事件里使用绘图器(QPainter)进行画图是不直接支持的。因为在Qt中,绘图操作通常需要依赖于特定的上下文和事件循环。

然而,你可以通过以下方式实现在普通函数里进行绘图:

  1. 创建一个继承自QWidget或QQuickItem的自定义类,在其paintEvent函数中实现具体的绘图逻辑。
  2. 在普通函数中创建该自定义类的实例,并将其添加到应用程序的窗口或场景中。
  3. 调用QWidget或QQuickItem对象的update()函数来触发重绘。

这样做会模拟事件驱动的方式,在普通函数内部间接地实现了画图操作。以下是示例代码:

#include <QApplication>
#include <QWidget>
#include <QPainter>

class MyWidget : public QWidget {
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);

        // 设置画笔和画刷
        QPen pen(Qt::red, 2);
        painter.setPen(pen);
        QBrush brush(Qt::yellow);
        painter.setBrush(brush);

        // 绘制矩形
        QRect rect(50, 50, 200, 100);
        painter.drawRect(rect);

        // 绘制文本
        QFont font("Arial", 12);
        painter.setFont(font);
        painter.drawText(rect, Qt::AlignCenter, "Hello World!");
    }
};

void drawSomething() {
    MyWidget widget;

    // 添加到窗口中,如果是QQuickItem,则添加到场景中
    widget.show();

    // 触发重绘
    widget.update();
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    drawSomething();

    return app.exec();
}

在上述示例中,drawSomething()函数创建了一个MyWidget实例,并将其添加到窗口中。然后,通过调用update()函数触发重绘操作。

注意:这种方式不是Qt推荐的做法,因为绘图操作通常应该在事件循环中进行。但是,如果你确实需要在普通函数里进行绘图,可以考虑使用类似的方法来间接实现。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?