Qt设置没有样式表的QTableView背景图像

问题描述 投票:1回答:1

我想为QTableView设置背景图像。

在函数内部,我创建了一个测试QWidget并应用了图像,它可以完美地工作。我传入的fp_widget是QTableView,问题就来了。该图像未显示/未应用于QTableView。

void setBackgroundImage(QWidget *fp_widget, const QPixmap &image)
{            
    QPalette palette;
    palette.setBrush(QPalette::Background, image);
    fp_widget->setPalette(palette);

    QWidget *test = new QWidget;
    test->setPalette(palette);
    test->resize(800,800);
    test->show();
}
qt background-image qtableview
1个回答
0
投票

如果您可以将表格视图放在小部件内,则值得尝试。在下面的示例中,我在设计器中进行了此操作,并为背景小部件提供了一个网格布局,其所有边距均设置为0,以便表格视图完全与背景小部件重叠。

首先,设置表视图viewport背景透明(使用CSS):

ui->tableView->viewport()->setStyleSheet("background: transparent");

然后,您必须在其绘画事件中的背景小部件中绘制QPixmap。您可以自己(子类)专门设置QWidget并重新实现该事件,或使用如下事件过滤器:

bool Widget::eventFilter(QObject *obj, QEvent *e)
{
    if (e->type() == QEvent::Paint)
    {
        QPainter p(ui->bgWidget);
        p.drawPixmap(0, 0, _p->scaled(ui->bgWidget->size()));
        return true;
    }
    return false;
}

[注意,我使用_p指向QPixmap的指针,这是我的顶层小部件的私有成员(在构造函数中,我从文件中加载了测试图片)。另外,我只是压缩像素图以适合背景大小。

过滤器必须安装在后台小部件(bgWidget)中,我再次在顶级小部件构造函数中执行此操作:

ui->bgWidget->installEventFilter(this);
© www.soinside.com 2019 - 2024. All rights reserved.