前言
提供了基本的实现思路,没有使用贴图,完全自己绘制的指南针,具体控件的接口和配色可以根据自己需要进行调整。
聊聊代码
compass.h
#ifndef COMPASS_H
#define COMPASS_H
#include <qframe.h>
namespace Ui {
class Compass;
}
class Compass : public QFrame {
Q_OBJECT
public:
explicit Compass(QWidget *parent = NULL);
~Compass();
public slots:
void set_direction(const float direction);
void set_campass_scale(const float scale); // 设置指南针在控件中的比例
void set_campass_scale(const quint32 widget_scale, const quint32 campass_scale); // 设置指南针在控件中的比例
protected:
void paintEvent(QPaintEvent *event);
private:
Ui::Compass *_ui;
float _direction;
float _campass_scale;
};
#endif // COMPASS_H
compass.cpp
#include "compass.h"
#include "ui_compass.h"
#include <qevent.h>
#include <qpainter.h>
#include <qrect.h>
#include <qdebug.h>
Compass::Compass(QWidget *parent) :
QFrame(parent),
_ui(new Ui::Compass),
_direction(0.0),
_campass_scale(4.0 / 5.0) {
_ui->setupUi(this);
}
Compass::~Compass() {
delete _ui;
}
void Compass::set_direction(const float direction) {
_direction = float(int(direction) % 360) + float(direction - float(int(direction)));
_ui->lb_angle->setText(QString::number(_direction) + QApplication::translate("Compass", "\302\260"