How can I draw and show 1 million circle (radius 5, filled with same color) in smaller than 10ms? I have tried all the way I can find in community but the best performance I can reach is about 2 seconds by using QPainter::drawEllipse() inside a QWidget::paintEvent().
You can't.
To understand why, let's do some math. You have 10 ms and you want to draw 1 million circles. That's 10 ns per circle or a drawing frequency of 100 MHz. On a current processor (~1 GHz), that means that you have to draw a circle in less than 10 clock cycles (~10 instructions). And that's a best case scenario: some instructions take more than 1 clock cycle to be processed, you can lose cycles if you have a cache miss and CPU has to fetch memory from RAM, the operating system can pause your program to let another process (or thread run), ...
So there is no way you are going to achieve this kind of performance with Qt and QPainter. It might be feasible if you use hardware acceleration (OpenGL, DirectX or maybe QtQuick). In the case you do not have to redraw everything programmatically, you can just update the "scene" when something change.