使用QPixmap填充QWidget的有效方法

时间:2014-11-05 16:34:27

标签: c++ qt qt5 qwidget

我正在努力让用户可以手动设置QWidget的背景,并使用自己的QPixmap从文件加载。{1}}。我的目标是使用QWidget填充QPixmap,缩放以填充整个QWidget(即QPixmap中的某些QWidget可能被边缘切断,如只要整个QBrush被填满)。所以,我不能使用m_backgroundPixmap绘制像素图,因为我不想要平铺。

目前,我有2个成员pixmap对象:m_scaledBackgroundPixmapresizeEvent。在每个m_backgroundPixmap上,我都会m_scaledBackgroundPixmap,将其缩放到正确的尺寸以适合QWidget,然后将其另存为paintEvent。在我的QPainter::drawPixmap中,我简单地使用resizeEvent来绘制缩放的像素图。

还有其他方法可以提高效率吗?我宁愿不必在每个resizeEvent上调整像素图的大小,特别是如果{{1}}导致窗口边缘被拉伸,这意味着它会在一个事件中获得很多这些事件。行。

1 个答案:

答案 0 :(得分:0)

您可以使用Qt样式表从文件加载背景图像。

myWidget->setObjectName("myWidget");
QString fileName = QFileDialog::getOpenFileName(this,
    tr("Open Image"), "/home", tr("Image Files (*.png *.jpg *.bmp)"));
myWidget->setStyleSheet("#myWidget {border-image: url("+fileName+")}");

此外,将CSS样式应用于从QWidget继承的自定义窗口小部件需要以这种方式重新实现paintEvent()

void MyWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}