gpt4 book ai didi

c++ - 使用 QPixmap 填充 QWidget 的有效方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:02 25 4
gpt4 key购买 nike

我正在努力做到这一点,以便用户可以使用他们自己的从文件加载的 QPixmap 手动设置 QWidget 的背景。我的目标是用 QPixmap 填充 QWidget,缩放以便填充整个 QWidget(即一些 QPixmap 可能会被边缘截断,只要整个 QWidget 被填满即可)。所以,我不能使用 QBrush 来绘制像素图,因为我不想平铺。

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

还有其他更有效的方法吗?我宁愿不必在每个 resizeEvent 上都调整像素图的大小,尤其是当 resizeEvent 导致窗口边缘被拉伸(stretch)时,这意味着它将得到一个连续发生很多这样的事件。

最佳答案

您可以使用 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);
}

关于c++ - 使用 QPixmap 填充 QWidget 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com