• 3714阅读
  • 2回复

QFont导致GDI对象增加 [复制链接]

上一主题 下一主题
离线wzfz2001
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-22
关键词: QFontGDI
见例子,当字体、字号切换时,gdi对象中的字体对象会不断增加,直到gdi资源耗尽
,导致程序崩溃。
谁遇到过这种情况,怎么解决啊。我的qt版本是4.5.0
离线wzfz2001

只看该作者 1楼 发表于: 2012-03-22
QPainter painter;
    painter.begin(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QString str[10]={"宋体","黑体","幼圆","仿宋","Arial","隶书","华文行楷","华文彩云","华文中宋","Times new roman"};
    int sz[10]={10,16,20,24,30,36,40,46,52,60};
    QString tx[10]={"中国人民共和国","dgdgdgd","dcs尿素","test","狗蛋","顽皮","wwwww","rwqrer","测试测试","随机测试"};
    int i=0;
    for (;i<20;++i)
    {
        QFont font(str[rand()%10]);
        font.setPixelSize(sz[rand()%10]);
        painter.setFont(font);
        painter.drawText(rand()%500,rand()%500,tx[i%10]);
    }
    painter.end();
离线wzfz2001

只看该作者 2楼 发表于: 2012-03-22
例子没传上来,主要就是下边的代码
Widget::Widget(QWidget *parent)
{
    elapsed = 0;
    setFixedSize(500, 500);
    m_pTimer = new QTimer(this);
    connect(m_pTimer, SIGNAL(timeout()), this, SLOT(update()));
    m_pTimer->start(2000);
}
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    painter.begin(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QString str[10]={"宋体","黑体","幼圆","仿宋","Arial","隶书","华文行楷","华文彩云","华文中宋","Times new roman"};
    int sz[10]={10,16,20,24,30,36,40,46,52,60};
    QString tx[10]={"中国人民共和国","dgdgdgd","dcs尿素","test","狗蛋","顽皮","wwwww","rwqrer","测试测试","随机测试"};
    int i=0;
    for (;i<20;++i)
    {
        QFont font(str[rand()%10]);
        font.setPixelSize(sz[rand()%10]);
        painter.setFont(font);
        painter.drawText(rand()%500,rand()%500,tx[i%10]);
    }
    painter.end();
}
快速回复
限100 字节
 
上一个 下一个