湖南手機(jī)版建站系統(tǒng)哪家好石家莊學(xué)院
使用繪圖事件,繪制坦克。
效果
效果很逼真,想象力,有沒有。
示例
代碼像詩一樣優(yōu)雅,有沒有。
- 包含頭文件
#include <QApplication>
#include <QWidget>
#include <QPainter>
- 繪制坦克類
class TankWidget : public QWidget
{
public:TankWidget(QWidget *parent = 0): QWidget(parent){setFixedSize(400, 300);}protected:void paintEvent(QPaintEvent *){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);int nOffset = 0;for(int i = 0; i < 4; ++i){// 繪制坦克炮筒painter.setPen(Qt::black);painter.setBrush(Qt::gray);painter.drawRect(90+nOffset, 100, 20, 60);// 繪制坦克車身painter.setBrush(Qt::darkGreen);painter.drawRect(30+nOffset, 140, 60, 20);painter.drawRect(40+nOffset, 120, 40, 20);// 繪制坦克底盤painter.setPen(Qt::black);painter.setBrush(Qt::green);painter.drawRect(10+nOffset, 160, 100, 40);// 繪制坦克履帶painter.setPen(Qt::black);painter.setBrush(Qt::darkGray);// 履帶painter.drawEllipse(12+nOffset, 190, 20, 20);painter.drawEllipse(37+nOffset, 190, 20, 20);painter.drawEllipse(62+nOffset, 190, 20, 20);painter.drawEllipse(87+nOffset, 190, 20, 20);nOffset += 150;}}
};
- 調(diào)用
int main(int argc, char *argv[])
{QApplication app(argc, argv);TankWidget widget;widget.show();return app.exec();
}
分析
- 首先,通過繪制矩形、橢圓等基本圖形進(jìn)行坦克的繪制。其中,通過設(shè)置畫刷的顏色和繪制順序等繪制技巧,實(shí)現(xiàn)了具有逼真感的坦克效果。
- 需要注意的是,在Qt中,可以通過重載
QWidget
的paintEvent
函數(shù),來實(shí)現(xiàn)對控件的繪制操作。在paintEvent
函數(shù)中,可以使用QPainter
對象進(jìn)行各種基本圖形的繪制,并設(shè)置畫筆、畫刷等屬性,以達(dá)到所需的效果。 - 除此之外,還可以使用
QPixmap
和QImage
等對象,將一幅靜態(tài)的坦克圖像加載到窗口中,來實(shí)現(xiàn)更加逼真的坦克效果。