当前位置: 首页 > article >正文

QT使用promoted后样式(setStyleSheet)不生效问题解决

1.理解promoted(提升)在 Qt 中的概念

在 Qt Designer 中,“提升(Promoted)” 是一种机制,它允许你使用自定义的部件类来替代标准的 Qt 部件类。这在你已经创建了一个从标准 Qt 部件(如QListWidget)派生的自定义部件(如ListMenu)并且希望在设计器环境中使用它时非常有用。

2.样式不生效的可能原因及解决方法

原因:当你在 Qt Designer 中提升一个部件后,部件的初始化顺序可能会导致样式表加载出现问题。在某些情况下,Qt Designer 可能会在自定义部件的构造函数(其中设置了样式表)之前就对部件进行了一些默认的初始化操作,从而覆盖了样式表的设置。

解决方法:可以尝试在自定义部件类中提供一个公共函数来设置样式表,然后在使用该部件的地方(例如包含这个提升部件的窗口类的构造函数)手动调用这个函数。例如,在ListMenu类中添加一个setupStyle函数:

1.头文件

#ifndef LISTMENU_H
#define LISTMENU_H

#include <QListWidget>

class ListMenu : public QListWidget
{
    Q_OBJECT
public:
    ListMenu(QWidget *parent = nullptr);
    void setupStyle();  // 用于设置样式表的函数
};

#endif // LISTMENU_H

2.CPP文件 

#include "ListMenu.h"

ListMenu::ListMenu(QWidget *parent) : QListWidget(parent)
{
    setupStyle();
}

void ListMenu::setupStyle()
{
    // 设置整体列表的背景颜色、边框等样式
    this->setStyleSheet("QListWidget{"
                        "background-color: #f0f0f0;"
                        "border: 1px solid gray;"
                        "}"
                        // 设置列表项的样式,比如文字颜色、背景色、悬停效果等
                        "QListWidget::item{"
                        "color: #333333;"
                        "padding: 5px;"
                        "}"
                        "QListWidget::item:hover{"
                        "background-color: #cccccc;"
                        "}");
}

3.在外部调用 setupStyle函数

       - 然后在包含`ListMenu`的窗口类(假设为`MainWindow`)的构造函数中调用这个函数:
       ```cpp
       MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
       {
           // 假设ui是通过Qt Designer生成的界面类
           ui->setupUi(this);
           ListMenu *listMenu = qobject_cast<ListMenu *>(ui->promotedListMenu);
           if (listMenu)
           {
               listMenu->setupStyle();
           }
       }


http://www.kler.cn/a/442989.html

相关文章:

  • 3D,点云平滑法线估计
  • 前端面经每日一题Day15
  • 如何使用datagrip连接spark
  • IDEA搭建springboot demo
  • Qlib专为AI而生的量化投资平台
  • GPT核心原理
  • 模具制造之三维扫描和逆向建模
  • 限制redis内存
  • 【赛博保安】安全日记反弹Shell加密算法信息打点(二)
  • LLM大语言模型私有化部署-OpenEuler22.03SP3上容器化部署Dify与Qwen2.5
  • 【Qt】QWidget中的常见属性及其功能(二)
  • ffmpeg使用方法
  • 穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集
  • jQuery lightbox插件ViewBox
  • Leetcode打卡:形成目标字符串需要的最少字符串数I
  • Vue.js前端框架教程7:Vue计算属性和moment.js
  • XSLT 编辑 XML
  • Java类
  • 论文笔记-KDD2024-TransRec
  • 【Python爬虫系列】_032.Scrapy_全站爬取