我正在努力让用户可以手动设置QWidget
的背景,并使用自己的QPixmap
从文件加载。{1}}。我的目标是使用QWidget
填充QPixmap
,缩放以填充整个QWidget
(即QPixmap
中的某些QWidget
可能被边缘切断,如只要整个QBrush
被填满)。所以,我不能使用m_backgroundPixmap
绘制像素图,因为我不想要平铺。
目前,我有2个成员pixmap对象:m_scaledBackgroundPixmap
和resizeEvent
。在每个m_backgroundPixmap
上,我都会m_scaledBackgroundPixmap
,将其缩放到正确的尺寸以适合QWidget,然后将其另存为paintEvent
。在我的QPainter::drawPixmap
中,我简单地使用resizeEvent
来绘制缩放的像素图。
还有其他方法可以提高效率吗?我宁愿不必在每个resizeEvent
上调整像素图的大小,特别是如果{{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);
}