本系列所有文章可以在這里查看[http://blog.csdn.net/cloud_castle/article/category/2123873](http://blog.csdn.net/cloud_castle/article/category/2123873)
接上文[](http://blog.csdn.net/cloud_castle/article/details/39251931)[Qt5官方demo解析集33——Qt Quick Examples - Window and Screen](http://blog.csdn.net/cloud_castle/article/details/39291069)
好像有一段時間沒有更新這個系列了,一方面是很多的事摻雜著一起來了,稍微比原來忙了一些;但時間哪有擠不出來的呢,所以更重要的一個原因其實是很難找到一個特別合適的Demo來做這個主題。有的Demo內容很偏很少項目在做,有的Demo又過于基礎,我總希望能挑出一些大家經常能接觸得到又需要了解的知識點~
因為Qt的每一個官方Demo都有一個關注的點,每次把所有的代碼都貼出來可能這個系列的重復部分會越來越多。。。所以從本文開始,我們只把關鍵代碼挑出來濃墨重彩地介紹一下(*^__^*)?
好了,廢話少說,進入今天的正題吧:Concentric Circles Example
大家都知道在Qt里面繪制一個橢圓可以在paintEvent()中使用
~~~
painter.drawEllipse(QRect(-diameter / 2, -diameter / 2, diameter, diameter));
~~~
那么我們這樣繪制多個同心圓的效果大概像下面這樣:
(在放大鏡效果下對Demo運行效果的截圖)

首先讓我們將這及其不圓潤的邊緣放在一邊,細心的你可能會發現,這些同心圓總是兩兩之間挨得特別近,而我們明明是繪制的等距的同心圓?其實答案很簡單,它就是對整型坐標值進行計算后四舍五入得到的結果。知道問題的來源后,解決起來就容易了。
Qt很貼心地為我們提供了另一個接受QRectF()參數的drawEllipse():
~~~
painter.drawEllipse(QRectF(-diameter?/?2.0,?-diameter?/?2.0,?diameter,?diameter));
~~~

看看有沒有好一點?一方面我們確實得到了等距的同心圓,另一方面也顯得圓潤了些,上圖中那么顯眼的直線也沒那么長了。
如果想要進一步得到更加圓潤的圓,我們可以設置painter的抗鋸齒效果QPainter::Antialiasing,簡單點說它是通過采樣算法將在圖形邊緣會造成鋸齒的像素與周圍的像素作一個平均的運算,并增加像素的數目,這樣來形成區域像素點的平滑過渡的效果。不過,這樣做的副作用是圖像會顯得有些模糊。
drawEllipse(QRect()) + 抗鋸齒:
~~~
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QRect(-diameter?/?2,?-diameter?/?2,?diameter,?diameter));
~~~

drawEllipse(QRectF()) + 抗鋸齒:
~~~
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QRectF(-diameter?/?2.0,?-diameter?/?2.0,?diameter,?diameter));
~~~

最后我們還是看下整個程序的界面吧:

- 前言
- 1——Fortune Server/Client
- 2——Multicast Sender/Receiverz
- 3——Broadcast Sender/Receiver
- 4——Blocking Fortune Client
- 5——Threaded Fortune Server
- 5(總結)——Fortune例程的各個實現區別
- 6——Loopback Example
- 7——Analog Clock Example
- 8——Shaped Clock Example
- 9——Analog Clock Window Example
- 10——Qt Quick Particles Examples - Emitters
- 11——Qt Quick Particles Examples - Affectors
- 12——Qt Quick Particles Examples - CustomParticles
- 13——Qt Quick Particles Examples - Image Particles
- 14——Qt Quick Particles Examples - System
- 15——Chapter 1: Creating a New Type
- 16——Chapter 2: Connecting to C++ Methods and Signals
- 17——Chapter 3: Adding Property Bindings
- 18——Chapter 4: Using Custom Property Types
- 19——Chapter 5: Using List Property Types
- 20——Chapter 6: Writing an Extension Plugin
- 21——Extending QML - Adding Types Example
- 22——Extending QML - Object and List Property Types Example
- 23——Extending QML - Inheritance and Coercion Example
- 24——Extending QML - Default Property Example
- 25——Extending QML - Methods Example
- 26——Extending QML - Grouped Properties Example
- 27——Extending QML - Attached Properties Example
- 28——Extending QML - Signal Support Example
- 29——Extending QML - Property Value Source Example
- 30——Extending QML - Binding Example
- 31——StocQt
- 32——Qt Quick Examples - Threading
- 33——Qt Quick Examples - Window and Screen
- 34——Concentric Circles Example
- 35——Music Player
- 36——Wiggly Example
- 37——Vector Deformation