Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. QWidget程序在paintEvent中绘制背景色的问题
Qt 6.11 is out! See what's new in the release blog

QWidget程序在paintEvent中绘制背景色的问题

Scheduled Pinned Locked Moved Unsolved Chinese
1 Posts 1 Posters 728 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Offline
    W Offline
    wgong
    wrote on last edited by
    #1

    环境

    Win10,Qt5.14.2+MSVC,VS2022;

    问题描述

    基于QWidget的工程,调用QWidget::show之后,开始事件循环之前,主窗口显示出来了,但其上的子控件并未显示,且paintEvent也未被调用。直到事件循环开始后,子控件才会显示,paintEvent也才会被调用。这会导致程序启动时会闪一下。特别是如果在paintEvent里刷深色背景的话特别明显。

    请问如何才能解决这个问题?

    重现步骤

    • VS中基于QWidget建立一个新的工程wDemo;
    • 用QtDesigner在主窗口上加入一个pushbutton;
    • 在wDemo.h中添加以下函数申明:
    void  paintEvent(QPaintEvent* event);
    
    • 在wDemo.cpp添加函数实现:
    void wDemo::paintEvent(QPaintEvent* event){
         QPainter painter(this);
         pn.fillRect(QRect(0, 0, width(), height()), Qt::blue);
    }
    
    • 编译执行。可以看到程序启动的时候会先闪一下。
    • 为仔细观察,可在main.cpp的return a.exec()那一行加个断点观察。
    //main.cpp
    int main(int argc, char* argv[]){
         QApplication a(argc, argv);
         wDemo w;
         w.show();             //w.show()之后,主窗口显示,但pushbutton未显示,且w.paintEvent并未调用,主窗口背景为原始白色。
         return a.exec();  //断点加在此行。此行执行后,子控件才会显示,w.paintEvent也会被调用,背景被刷成蓝色
    }
    

    备注

    实测:

    • QWidget换成QDiaolog,QWindow为BaseClass的工程也这样。
    • MSVC换MinGW也如此。
    • VS换成QtCreator也是这样。
    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved