| Цитата(airens @ 29.6.2009, 18:48) | | но каким образом можно вычислить координаты пар точек, через которые строить риски? |
Можно вот так, например:
| Код | #ifndef WIDGET_H #define WIDGET_H
#include <QtGui/QWidget>
class Widget : public QWidget { Q_OBJECT
public: Widget(QWidget *parent = 0); ~Widget();
protected: void paintEvent(QPaintEvent *event);
private: void circleScale(QPainter *painter, qreal radius, qreal tickLength, int numTicks); };
#endif // WIDGET_H
|
| Код | #include "widget.h"
#include <math.h> #include <QPainter>
Widget::Widget(QWidget *parent) : QWidget(parent) { setMinimumSize(100, 100); }
Widget::~Widget() {
}
void Widget::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.translate(0.5 * width(), 0.5 * height()); qreal radius = 0.35 * qMin(width(), height()); qreal tickLength = 0.15 * radius; circleScale(&painter, radius, tickLength, 16); }
void Widget::circleScale(QPainter *painter, qreal radius, qreal tickLength, int numTicks) { QPen pen(QBrush(Qt::blue), 2.0); QFont font("Arial"); font.setPixelSize((int)tickLength); painter->setPen(pen); painter->setFont(font); painter->drawEllipse(QPointF(0, 0), radius, radius); for (int i = 0; i < numTicks; ++i) { qreal angle = 2 * M_PI * i / numTicks; qreal cs = cos(angle); qreal sn = -sin(angle); qreal x = radius * cs; qreal y = radius * sn; qreal dx = 0.5 * tickLength *cs; qreal dy = 0.5 * tickLength *sn; painter->drawLine(QPointF(x - dx, y - dy), QPointF(x + dx, y + dy)); QString text = QString("%1").arg(i); QTextOption textOption(Qt::AlignCenter); QRectF rect(x + dx, y + dy, 3 * dx, 3 * dy); rect = painter->boundingRect(rect, text, textOption); painter->drawText(rect, text, textOption); } }
|
| Код | #include <QtGui/QApplication> #include "widget.h"
int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.resize(400, 300); w.show(); return a.exec(); }
|

|