我想將一些圖形效果應用於QListView中列表項的像素圖。如何將圖形效果應用於QListView中的圖像?
我該怎麼做才能做到這一點?
據我瞭解,我需要爲此做出自己的代表。但我如何使用QGraphicsEffect呢?
更新。
如果使用QListWidget,我可以做一些事情來達到以下效果。爲每個列表項創建小部件併爲它們應用所需的QGraphicsEffect。這個小工具會是這樣的(例如):
class PortraitViewWidget : public QFrame
{
Q_OBJECT
public:
explicit PortraitViewWidget(QWidget* parent = nullptr)
{
auto imageView = new QWidget();
auto imageViewLayout = new QVBoxLayout();
auto imageLabel = new QLabel();
auto textLabel = new QLabel();
// test defaults
imageLabel->setPixmap(QPixmap("/Lenna.png"));
imageLabel->setScaledContents(true);
static qreal quality = 0.f;
quality += 0.1752f;
if(quality > 1.f)
quality = 1.f;
textLabel->setText(QString("%1%").arg(quality * 100.f, 0, 'f', 1));
textLabel->setAlignment(Qt::AlignCenter);
textLabel->setStyleSheet(
"QLabel {"
" background-color: white;"
" color: black;"
" font-size: 16px;"
" padding: 2px; }");
imageViewLayout->addWidget(imageLabel);
imageViewLayout->addWidget(textLabel);
imageViewLayout->setMargin(0);
imageViewLayout->setSpacing(0);
imageViewLayout->setContentsMargins(0, 0, 0, 0);
imageView->setLayout(imageViewLayout);
auto effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(55);
effect->setOffset(0.f);
effect->setColor(Qt::green);
imageView->setGraphicsEffect(effect);
imageView->setSizePolicy(
QSizePolicy::Expanding,
QSizePolicy::Expanding);
imageView->setMinimumSize(240, 320);
imageView->setMaximumSize(480, 640);
auto layout = new QVBoxLayout();
layout->addWidget(imageView);
layout->setMargin(25);
setLayout(layout);
}
};
但在這種情況下,我必須還實現在小部件,以反映近手工contnts更新數據,這是徹底bothersome.Currently,用而QListView改變模型中的數據非常簡單直接 - 我甚至可以即時更改使用的模型。
有沒有辦法實現項目的相同展望?也許有一種實施代表的模式,可能適用...
你能更具體一點嗎?什麼包含你的QListView?你是否想要定製它的外觀(如你所提到的那樣在代表中)?如果你想添加「效果」,你可能會有一些已經運行的代碼,把它放在這裏肯定會幫助我們理解這個問題。 – Uflex