2014-11-05 78 views
2

我試圖讓用戶可以手動設置QWidget的背景,用他們自己的QPixmap從文件加載。我的目標是填充QWidgetQPixmap,按比例縮小以便填充整個QWidget(即,只要填充整個QWidget,可以將邊緣切掉一些QPixmap)。所以,我不能使用QBrush來繪製像素圖,因爲我不想平鋪。用QPixmap填充QWidget的有效方法

當前,我有2個成員像素對象:m_backgroundPixmapm_scaledBackgroundPixmap。每resizeEvent,我拿m_backgroundPixmap,縮放到正確的尺寸,以適應QWidget,然後將其保存爲m_scaledBackgroundPixmap。在我的paintEvent中,我簡單地使用QPainter::drawPixmap來繪製縮放的像素圖。

有沒有其他的方法可以做到這一點更有效?我寧願不必在每個resizeEvent上調整像素圖的大小,特別是如果resizeEvent正在導致窗口邊緣被拉伸,這意味着它會連續獲得大量這些事件。

回答

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的繼承自定義部件需要以這種方式

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