Tôi muốn có ảnh nền trong QGraphicsView luôn được thu nhỏ (và cắt nếu cần) với kích thước của khung nhìn, không có thanh cuộn và không cuộn bằng bàn phím và chuột. Ví dụ dưới đây là những gì tôi đang làm để mở rộng quy mô và cắt một hình ảnh trong khung nhìn, nhưng tôi đang sử dụng các giá trị ngẫu nhiên cho việc cắt xén được kéo ra khỏi aether. Tôi muốn một giải pháp hợp lý?QGraphicsXem cuộn và chia tỷ lệ hình ảnh
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->resize(800, 427);
// MainWindow is 800x480, GraphicsView is 800x427. I want an image that
// is the size of the graphicsView.
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// the graphicsView still scrolls if the image is too large, but
// displays no scrollbars. I would like it not to scroll (I want to
// add a scrolling widget into the QGraphicsScene later, on top of
// the background image.)
QPixmap *backgroundPixmap = new QPixmap(":/Valentino_Bar_Prague.jpg");
QPixmap sized = backgroundPixmap->scaled(
QSize(ui->graphicsView->width(),
ui->graphicsView->height()),
Qt::KeepAspectRatioByExpanding); // This scales the image too tall
QImage sizedImage = QImage(sized.toImage());
QImage sizedCroppedImage = QImage(sizedImage.copy(0,0,
(ui->graphicsView->width() - 1.5),
(ui->graphicsView->height() + 19)));
// so I try to crop using copy(), and I have to use these values
// and I am unsure why.
QGraphicsPixmapItem *sizedBackground = scene->addPixmap(
QPixmap::fromImage(sizedCroppedImage));
sizedBackground->setZValue(1);
ui->graphicsView->setScene(this->scene);
}
Tôi muốn biết cách chia tỷ lệ và cắt hình ảnh thành kích thước của QGraphicsView sẽ hoạt động ngay cả khi tôi thay đổi kích cỡ QGraphicsView. 1.5 và 19 đến từ đâu?
EDIT; Tôi cũng đã cố gắng sử dụng setBackgroundBrush, nhưng tôi nhận được một nền lát, ngay cả khi sử dụng QImage/QPixmap thu nhỏ/thu nhỏ.
EDIT; Giải pháp của tôi cho đến nay đã được ghi đè lên drawBackground() để có được kết quả tôi muốn, nhưng điều này vẫn không giúp tôi tìm hiểu làm thế nào để kích thước một hình ảnh để kích thước khung nhìn của một qgraphicsview. Bất kỳ câu trả lời nào khác sẽ được đánh giá cao.
void CustomGraphicsView::drawBackground(QPainter * painter, const QRectF & rect)
{
qDebug() << "background rect: " << rect << endl;
QPixmap *backgroundPixmap = new QPixmap(":/Valentino_Bar_Prague.jpg");
QPixmap sized = backgroundPixmap->scaled(QSize(rect.width(), rect.height()), Qt::KeepAspectRatioByExpanding);
painter->drawPixmap(rect, sized, QRect(0.0, 0.0, sized.width(), sized.height()));
}
Từ các tài liệu: "Cảnh rect xác định mức độ của hiện trường, và trong trường hợp của xem, điều này có nghĩa khu vực của cảnh mà bạn có thể điều hướng sử dụng các thanh cuộn. " sceneRect không phải là thứ tôi muốn, điều đó mang lại cho tôi kích thước của cảnh, bất kể kích thước khung nhìn là gì. Tôi muốn kích thước khung nhìn. Tôi muốn kích thước một hình ảnh cho các kích thước đó. Điều này có vẻ đơn giản; lấy chiều rộng/chiều cao của qgraphicsview và công việc nên được thực hiện. Nhưng chiều rộng và chiều cao không chính xác khi tôi chia tỷ lệ hình ảnh thành kích thước đó: phần còn thiếu ở đây là gì? Tôi sẽ thử drawBackground. – user298725