drawPoint は点の大きさの指定等はできないので難しいです。
QGraphicsScene と QGraphicsView を使うのはどうでしょうか?
- QGraphicsView の scale() 関数で倍率を指定すると、QGraphicsScene に描画されているアイテムが自動でスケールされて表示されます。
- イベントを拾えば、マウスホイールで倍率をグリグリ変えたりできます。
- 点の描画は addPoint() のような関数はないので、addEllipse() で行います。
サンプルコード
PyQt の環境がないためC++ のコードになりますが、Qt の API は基本同じだと思います。
cpp
1#include "mainwindow.h"
2#include "ui_mainwindow.h"
3
4#include <random>
5
6#include <QGraphicsScale>
7
8MainWindow::MainWindow(QWidget *parent)
9 : QMainWindow(parent), ui(new Ui::MainWindow)
10{
11 ui->setupUi(this);
12 // シーンを作成する。
13 QGraphicsScene *scene = new QGraphicsScene();
14 // シーンを QGraphcsView に設定する。
15 ui->graphicsView->setScene(scene);
16
17 // アンチエイリアス設定
18 ui->graphicsView->setRenderHints(
19 QPainter::Antialiasing | QPainter::SmoothPixmapTransform
20 | QPainter::HighQualityAntialiasing);
21
22 // [0, 100] の一様分布に従う点 (x, y) を 100 個描画する。
23 std::random_device device;
24 std::mt19937 engine(device());
25 std::uniform_real_distribution<> dist(0, 100);
26
27 for (int i = 0; i < 100; i++) {
28 double x = dist(engine);
29 double y = dist(engine);
30 scene->addEllipse(x, y, 1, 1, QPen(Qt::blue), QBrush(Qt::blue));
31 }
32}
33
34MainWindow::~MainWindow()
35{
36 delete ui;
37}
38
39void MainWindow::on_doublePushButton_clicked()
40{
41 // スケール変更
42 ui->graphicsView->resetMatrix()
43 ui->graphicsView->scale(2, 2);
44}
45
46void MainWindow::on_halfPushButton_clicked()
47{
48 // スケール変更
49 ui->graphicsView->resetMatrix()
50 ui->graphicsView->scale(0.5, 0.5);
51}
52
53void MainWindow::on_DefaultPushButton_clicked()
54{
55 // スケール変更
56 ui->graphicsView->resetMatrix()
57}
cpp
1#ifndef MAINWINDOW_H
2#define MAINWINDOW_H
3
4#include <QMainWindow>
5
6namespace Ui
7{
8class MainWindow;
9}
10
11class MainWindow : public QMainWindow
12{
13 Q_OBJECT
14
15 public:
16 explicit MainWindow(QWidget *parent = 0);
17 ~MainWindow();
18
19 private slots:
20 void on_doublePushButton_clicked();
21 void on_halfPushButton_clicked();
22 void on_DefaultPushButton_clicked();
23
24 private:
25 Ui::MainWindow *ui;
26};
27
28#endif // MAINWINDOW_H


バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/12 03:04
2018/09/19 01:02
2018/09/19 02:20
2018/09/20 06:50 編集
2018/09/20 07:03