QCustomPlot установить pixamp на сетке - PullRequest
0 голосов
/ 27 августа 2018

Я пытался добавить pixamp на QCustomPlot, это мой код:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) {

    ui->setupUi(this);

    _pixmap = new QCPItemPixmap(ui->widget);
    ui->widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked() {

    QImage image = QImage(200, 200, QImage::Format_RGB32);
    int image_size = 200 * 200;
    QRgb pixel;
    QRgb green = qRgb(0, 255, 0);
    QRgb red = qRgb(255, 0, 0);

    for(int i = 0; i < image_size; i++) {

        if(i % 2 == 0) {
            pixel = green;
        }
        else {
            pixel = red;
        }
        image.setPixel(i / 200, i % 200, pixel);
    }

    QPixmap pixels = QPixmap::fromImage(image.scaled(ui->widget->width(),ui->widget->height(),
                                                     Qt::IgnoreAspectRatio, Qt::FastTransformation));

    _pixmap->setVisible(true);
    _pixmap->setScaled(true);
    _pixmap->setPixmap(pixels);

    _pixmap->topLeft->setCoords(2.0, 3.0);
    _pixmap->bottomRight->setCoords(5.0, 0.0);

    ui->widget->replot();
}

Растровое изображение должно быть прямоугольником между ([2,3], [5,3], [5,0], [2,0]), но я не понимаю точно:

enter image description here

Почему разрыв не установлен на 5,0?

1 Ответ

0 голосов
/ 27 августа 2018

Глядя на метод

void QCPItemPixmap::setScaled ( bool  scaled, Qt::AspectRatioMode  aspectRatioMode = Qt::KeepAspectRatio, Qt::TransformationMode  transformationMode = Qt::SmoothTransformation  )

, можно увидеть, что значение по умолчанию для aspectRatioMode равно Qt::KeepAspectRatio, измените его на Qt::IgnoreAspectRatio для достижения желаемого результата.

Это выглядело быкак это:

...
_pixmap->setVisible(true);
_pixmap->setScaled(true, Qt::IgnoreAspectRatio);
_pixmap->setPixmap(pixels);
...
...