首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPainter。绘制线条

QPainter。绘制线条
EN

Stack Overflow用户
提问于 2014-07-10 16:48:50
回答 3查看 38.9K关注 0票数 8

我在试着划清界限。

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QPainter painter(&w);
    painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
    painter.drawLine(0, 0, 200, 200);

    return a.exec();
}

但是窗子上什么画都没有。怎么啦?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-10 17:01:18

您不能在paintEvent()函数之外进行绘制,至少在Windows和Mac上是如此。但是,您可以覆盖MainWindow类的paintEvent()函数来在那里画线。例如:

代码语言:javascript
复制
class Widget : public QWidget
{
protected:
    void paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
        painter.drawLine(0, 0, 200, 200);
    }
};

和用法:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Widget w;
    w.show();
    [..]
票数 14
EN

Stack Overflow用户

发布于 2014-07-16 05:29:00

不能在paint事件之外的小工具上进行绘制。但您可以随时在非窗口小部件上进行绘制,例如在QImageQPixmapQPicture

代码语言:javascript
复制
#include <QtWidgets>

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

   QPicture pi;
   QPainter p(&pi);   
   p.setRenderHint(QPainter::Antialiasing);
   p.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
   p.drawLine(0, 0, 200, 200);
   p.end(); // Don't forget this line!

   QLabel l;
   l.setPicture(pi);
   l.show();
   return a.exec();
}
票数 13
EN

Stack Overflow用户

发布于 2014-07-10 16:52:43

小工具只能在其各自的paint事件中绘制。您可以在任何函数中的像素图上绘制,但需要在小部件paint事件中显示结果。

从文档中:

警告:当paintdevice是小部件时,QPainter只能在paintEvent()函数内或在paintEvent()调用的函数中使用;除非设置了Qt::WA_PaintOutsidePaintEvent小部件属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24672146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档