关于在UI界面中绘制随画面大小变化而变化的背景(QT,PyQT)

一般情况下UI界面背景绘制的方式及优缺点

1. 直接在QTdesigner中使用纯色或渐变背景

  • qtdesginer中设置纯色背景和渐变色背景相对简单,且样式表中能很方便的通过调色盘,制作出你想要的的背景色和渐变色。

  • --渐变色调色盘,可以在样式表中选择添加渐变,点击创建制作新的渐变效果

  • --而且无论是渐变色还是纯色都不需要担心画面大小变化的问题
  • --在样式表中使用背景的时候,记得用{}限制使用者,不然其子类下所有的默认背景都会被替换成设置的背景
QMainWindow{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(168, 35, 209, 255), stop:1 rgba(255, 255, 255, 255));}
  • 使用纯色背景(或渐变色背景)我们的界面会显得相对简单,在一些极简风格的软件中能得到很好的效果,但其缺点也在这里,纯色(渐变色)背景过于简单了,其在一些需要变化的场景下表现较差,特别是我们想使用一些艺术画或者和行业相关的图片作为背景的时候。

2. 直接在QTdesigner中调用素材作为背景

  • qt架构中可以使用qrc文件作为载体,添加在画面中显示的标志,背景等img素材,在UI绘制中我们同样可以直接使用样式表来设置界面背景。

  • --添加qrc文件

  • --添加素材
  • --使用样式表background-image添加背景
  • 使用该方法添加的背景图片大小与原图一致,当画面大小变化超过图片大小的时候,图片会以平铺的方式显示在背景中,因此除了一些特殊设计的可以自拼接的图片外,background这个名字里带着背景的添加方式反而不太适合。

  • --画面小于图片时,图片显示不全

  • --画面大于图片时,画面以平铺的形式复制显示
  • 在样式表中设置图片,比较有效的选择是使用border-image词条添加背景,该方法不会出现背景重复的情况,背景随画面大小变化。

  • --画面最大化时显示情况

  • --背景随画面变化
  • 大部分情况下该设置方法可以满足设计要求。

3. 通过重绘事件显示背景

  • qt结构中很多想法都可以通过事件比较轻松的实现,利用绘制事件我们同样达到使背景随画面变化的效果,甚至如果你的思路更广,你可以利用重绘事件作出更好的画面效果,比如背景随画面中显示不同而变化。

  • --其在QT中调用如下:

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawRect(MainWindow::rect());
    painter.drawPixmap(MainWindow::rect(),QPixmap(":/new/prefix1/timg2.jpg"));
}
  • --其在python中调用如下:
self.pixmap = QPixmap("timg2.jpg")  # 换成自己的图片的相对路径

def paintEvent(self, event):#
    try:
            painter = QPainter(self)
            painter.drawRect(self.rect())
            painter.drawPixmap(self.rect(), self.pixmap)
    except:
        pass
  • 利用QPixmap可以更方便的替换背景图片。
posted @ 2021-11-03 15:26  垂杨柳倒拔鲁智深  阅读(861)  评论(0编辑  收藏  举报