欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt編寫(xiě)自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán)

 更新時(shí)間:2022年06月14日 11:42:55   作者:友善啊,朋友  
這篇文章主要為大家詳細(xì)介紹了Qt編寫(xiě)自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Qt自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán)的具體代碼,供大家參考,具體內(nèi)容如下

#ifndef LOTTERYTURNTABLEWIDGET_H
#define LOTTERYTURNTABLEWIDGET_H
?
#include <QWidget>
?
class LotteryTurntableWidget : public QWidget
{
? ? Q_OBJECT
? ? Q_PROPERTY(int rotate READ getRotate WRITE setRotate MEMBER painterRotate)
public:
? ? LotteryTurntableWidget(QWidget *parent = nullptr);
? ? ~LotteryTurntableWidget()override;
? ? int getRotate();
? ? void setRotate(int rotate);
?
protected:
? ? void paintEvent(QPaintEvent *event)override;
? ? void mousePressEvent(QMouseEvent *event)override;
? ? void mouseReleaseEvent(QMouseEvent *event)override;
?
private:
? ? QRect centerBtnRect;
? ? bool isPressCenterBtn{false};
? ? bool isRuning{false};
? ? int painterRotate{0};
? ? void onRotateFinished();
? ? QList<Qt::GlobalColor> colorList;
};
#endif // LOTTERYTURNTABLEWIDGET_H
#include "lotteryturntablewidget.h"
#include <QPainter>
#include <QPaintEvent>
#include <QPainterPath>
#include <QTime>
#include <QDebug>
#include <QRandomGenerator>
#include <QPropertyAnimation>
?
LotteryTurntableWidget::LotteryTurntableWidget(QWidget *parent)
? ? : QWidget(parent)
{
? ? setPalette(Qt::white);
? ? setMinimumSize(500,500);
?
? ? colorList << Qt::red << Qt::yellow << Qt::green << Qt::cyan << Qt::blue << Qt::magenta << Qt::darkGreen << Qt::darkCyan;
}
?
LotteryTurntableWidget::~LotteryTurntableWidget()
{
}
?
int LotteryTurntableWidget::getRotate()
{
? ? return painterRotate;
}
?
void LotteryTurntableWidget::setRotate(int rotate)
{
? ? painterRotate = rotate;
? ? update();
}
?
void LotteryTurntableWidget::paintEvent(QPaintEvent *event)
{
? ? QPainter painter(this);
? ? painter.setRenderHint(QPainter::Antialiasing,true); ?//反走樣開(kāi)啟
? ? const auto rect = event->rect();
? ? auto radius = std::min(rect.width(),rect.height()) / 2 - 25;
?
? ? painter.save();
? ? painter.translate(rect.center()); //將坐標(biāo)系的原點(diǎn)設(shè)置為(r,r)
?
? ? QPen pen;
? ? pen.setColor(QColor("#F0630B"));
? ? pen.setWidth(16);
? ? painter.setPen(pen);
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? pen.setColor(QColor("#FF4500"));
? ? pen.setWidth(8);
? ? painter.setPen(pen);
? ? radius -= 8;
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? pen.setColor(QColor("#B71606"));
? ? pen.setWidth(40);
? ? painter.setPen(pen);
? ? radius -= 24;
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? painter.save();
? ? if(!isRuning)
? ? {
? ? ? ? painter.setPen(Qt::white);
? ? ? ? painter.setBrush(Qt::white);
? ? }
? ? for (int i = 0; i < 20; ++i)
? ? {
? ? ? ? painter.rotate(18.0);
? ? ? ? int smallEllipse;
? ? ? ? if(i % 2 == 0)
? ? ? ? {
? ? ? ? ? ? if(isRuning)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(painterRotate % 2 == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? painter.setPen(Qt::red);
? ? ? ? ? ? ? ? ? ? painter.setBrush(Qt::red);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? painter.setPen(Qt::blue);
? ? ? ? ? ? ? ? ? ? painter.setBrush(Qt::blue);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? smallEllipse = 15;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? if(isRuning)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(painterRotate % 2 == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? painter.setPen(Qt::blue);
? ? ? ? ? ? ? ? ? ? painter.setBrush(Qt::blue);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? painter.setPen(Qt::red);
? ? ? ? ? ? ? ? ? ? painter.setBrush(Qt::red);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? smallEllipse = 10;
? ? ? ? }
? ? ? ? painter.drawEllipse(QPoint(radius, 0), smallEllipse, smallEllipse);
? ? }
? ? painter.restore();
?
? ? pen.setColor(QColor("#FFC228"));
? ? pen.setWidth(20);
? ? painter.setPen(pen);
? ? radius -= 30;
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? radius -= 10;
? ? auto centerRect = QRect(-radius,-radius,radius * 2,radius * 2);
?
? ? painter.setPen(Qt::transparent);
? ? painter.save();
? ? painter.rotate(18.0 * painterRotate);
? ? for (int i = 0;i < 8;++i)
? ? {
? ? ? ? QPainterPath path;
? ? ? ? path.moveTo(0,0);
? ? ? ? path.arcTo(centerRect, 45 * i,45);
? ? ? ? path.closeSubpath();
? ? ? ? painter.fillPath(path,colorList[i]);
? ? } ? ?
? ? painter.restore();
?
? ? QPainterPath trianglePath;//三角形
? ? QPolygon polygon;
? ? polygon.append(QPoint(0,-radius * 0.55));
? ? polygon.append(QPoint(-radius * 0.25,0));
? ? polygon.append(QPoint(radius * 0.25,0));
? ? trianglePath.addPolygon(polygon);
? ? painter.setBrush(QColor("#EEDAA2"));
? ? painter.drawPath(trianglePath);
?
? ? painter.setBrush(QColor("#FDFAEA"));
? ? radius = static_cast<int>(radius * 0.3);
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? painter.setBrush(isPressCenterBtn ? QColor("#B91A0D").lighter() : QColor("#B91A0D"));//中間的按鈕
? ? radius -= 2;
? ? painter.drawEllipse(QPoint(0, 0), radius, radius);
?
? ? centerBtnRect = QRect(rect.width() / 2 - radius,rect.height() / 2 - radius,radius * 2,radius * 2);
? ? painter.restore();
}
?
void LotteryTurntableWidget::mousePressEvent(QMouseEvent *event)
{
? ? if(isRuning)
? ? {
? ? ? ? QWidget::mousePressEvent(event);
? ? ? ? return;
? ? }
? ? QRegion ellipseRegion(centerBtnRect, QRegion::Ellipse);
? ? isPressCenterBtn = ellipseRegion.contains(event->pos());
? ? if(isPressCenterBtn)
? ? {
? ? ? ? isRuning = true;
?
? ? ? ? QPropertyAnimation *animation = new QPropertyAnimation(this, "rotate");
? ? ? ? animation->setEasingCurve(QEasingCurve::InOutCubic);
? ? ? ? animation->setDuration(3000);
? ? ? ? animation->setStartValue(0);
? ? ? ? animation->setEndValue(QRandomGenerator::global()->bounded(360) + 360 * 5);
? ? ? ? connect(animation, &QAbstractAnimation::finished, this, &LotteryTurntableWidget::onRotateFinished);
? ? ? ? animation->start(QAbstractAnimation::DeleteWhenStopped);
? ? ? ? update();
? ? }
? ? QWidget::mousePressEvent(event);
}
?
void LotteryTurntableWidget::mouseReleaseEvent(QMouseEvent *event)
{
? ? if(isPressCenterBtn)
? ? {
? ? ? ? isPressCenterBtn = false;
? ? ? ? update();
? ? }
? ? QWidget::mouseReleaseEvent(event);
}
?
void LotteryTurntableWidget::onRotateFinished()
{
? ? isRuning = false;
}

效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論