使用qt画太极图

我画了一个太极图,并以一定速率做旋转,发现旋转时出现一条直径,不知怎么回事。效果图和代码如下:
71.png

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
class MainWindow : public QWidget
{
   Q_OBJECT    
public:
   MainWindow(QWidget *parent = 0);
   ~MainWindow();
protected:
   void paintEvent(QPaintEvent *);
private:
   double rot;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
   : QWidget(parent),rot(0)
{
   setFixedSize(420,420);
   QTimer *timer = new QTimer;
   connect(timer,SIGNAL(timeout()),this,SLOT(update()));
   timer->start(50);
}

MainWindow::~MainWindow()
{
   
}

void MainWindow::paintEvent(QPaintEvent *)
{
   rot += 1;
   QPainter painter(this);
   painter.setWindow(-210,-210,420,420);
   painter.rotate(rot);
   painter.setRenderHint(QPainter::Antialiasing,true);
   painter.setBrush(QBrush(Qt::black,Qt::SolidPattern));
   painter.setPen(QPen(Qt::red,0,Qt::NoPen,Qt::RoundCap));
   painter.drawPie(-200,-200,400,400,90*16,180*16);
   painter.setBrush(QBrush(Qt::white,Qt::SolidPattern));
   painter.drawPie(-200,-200,400,400,270*16,180*16);
   painter.drawPie(-100,-200,200,200,90*16,180*16);
   painter.setBrush(QBrush(Qt::black,Qt::SolidPattern));
   painter.drawPie(-100,0,200,200,270*16,180*16);
   painter.drawEllipse(-20,-130,40,40);
   painter.setBrush(QBrush(Qt::white,Qt::SolidPattern));
   painter.drawEllipse(-20,70,40,40);

}

干嘛让MainWindow去继承QLabel,QWidget或者QMainWindow就行了吧。

有何区别?

QLabel和QWidget在这个例子里也不会引起什么区别……我强迫症

大哥,这网站怎么排版代码呀?为何搞成这样了?换行符无效?

你为什么不直接贴代码,要发图片呢

[

我原来是发代码的,但是代码缩进全部没了,很难看。我不知道怎么排版。

用发代码的“<>”就可以了啊

[

喔,请教大哥,太极图的直径影响美观,不过我不懂怎么去掉。如果是您来实现,怎么办?

。。。。这个我不是很懂,多看看它的api吧,感觉是画2个半圆的时候它们的重叠部位导致的

画半圆的时候让它们有一点重叠就好了,或者干脆在画小的半圆时用画圆的方法。
把抗锯齿关掉可能也有效。

找到答案了。