首页 > 其他分享 >QT使用promoted后样式(setStyleSheet)不生效

QT使用promoted后样式(setStyleSheet)不生效

时间:2024-12-16 18:30:02浏览次数:5  
标签:QListWidget Qt 样式表 部件 setupStyle setStyleSheet promoted ListMenu QT

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();
           }
       }

 

 

标签:QListWidget,Qt,样式表,部件,setupStyle,setStyleSheet,promoted,ListMenu,QT
From: https://blog.csdn.net/easydvlp/article/details/144514991

相关文章

  • Qt/C++地图测距/显示不同线段的距离/拿到测距结果/测距结束信号
    一、前言说明地图测距在地图组件中属于一个比较小众的功能,但是又不得不提供,有时候用户希望直接在地图上选点,测算距离,尤其是在一些军事领域用的比较多,测距功能提炼出来的共性就是,每一段都有距离,最后鼠标右键或者双击结束测距,然后发个信号传过来总的距离。一般地图厂家也都提供了对......
  • Qt事件系统
    一、Qt事件简介:1、事件是对应用程序内部或者外部产生的事情或者动作的通称。2、Qt程序是事件驱动的,Qt事件的产生和处理是程序运行的主线,存在于程序的整个生命周期。3、Qt事件被封装为对象,所有的Qt事件均继承自抽象类QEvent。4、常见的事件如下:(1)键盘事件:QKeyEv......
  • 国产麒麟操作系统适配Qt?
    国产麒麟操作系统适配Qt?https://mp.weixin.qq.com/s/k9SYVl_pdAOmosXgBDv-jA原创 Qt历险记 Qt历险记  2024年11月09日09:09 贵州麒麟操作系统是支持Qt的,简单安装步骤 1. 更新系统软件源:打开终端并运行以下命令来更新软件包:sudoaptupdatesudoaptupgrade......
  • Qt类型转换合集
    QString转化为wchar_t*类型方法1分配内存voidmesServiceClient::allocate(wchar_t*&target,constQString&value){if(value==nullptr){target=nullptr;return;}QStringtemp=value;size_ttempLength=temp.size()+1;t......
  • Qt之热键盘使用(八)
    Qt开发 系列文章-Hot-keyboard(八)目录前言一、键盘使用二、QKeyEvent按键事件1.使用QShortcut类2.重写keyPressEvent三、QxtGlobalShortcut库四、QHotkey库总结前言Qt实现热键盘/快捷键的使用,比较直接简单的是利用Qt自带的QShortcut类、QKeyEvent类,通过改写相关......
  • PyQt5 使用结合Logging 在 QPlainTextEdit/QTextBrowser 上显示日志信息
    PyQt5使用结合Logging在QPlainTextEdit/QTextBrowser上显示日志信息本文演示PyQt5如何与Python的标准库Logging结合,然后输出日志信息到如:QPlainTextEditQTextBrowser上代码结构本文中全部代码全在test_QPlainTextEdit_Log.py这一个文件中编码,步骤中有变动的地方会注......
  • Qt | 安全的udp服务器搭建(代码框架值得学习)
    点击上方"蓝字"关注我们01、项目框架>>>02、QHostAddress>>>QHostAddress 是 Qt 网络模块中的一个类,用于表示IP地址。它支持IPv4和IPv6地址,可以用于网络编程中,如建立TCP或UDP连接。QHostAddress 提供了一些方法来处理和转换IP地址03、m......
  • 使用PyTorch框架来训练语义分割模型——航空影像输电线路与输电塔分割数据集,使用U-Net
    航空影像的输电线路与输电塔分割数据集。该数据集包含1234张图像,超高分辨率(约3840×2160)标注了11447个对象,属于5个不同的类别,包括电缆(cable)、铁塔(tower_lattice)、木塔(tower_wooden)以及其他两种类型:混凝土或钢结构混合塔(tower_tucohy)和空白肉眼不可见线缆(void),共3GB好的......
  • M1安装pyqt5,pyqt5-tools,pyqt5designer
    M1安装pyqt5,pyqt5-tools,pyqt5designerpycharm可以安装pyqt5,安装pyqt5-tools,pyqt5designer都失败了。 在终端中输入:1brewinstallqt在这里brew会重新安装一个python,我这里安装的是python3.9.7版本。 按照网上的说法,使用homebrew下载这几个库,下载的python版......
  • Qt网络编程知识体系
    Qt网络编程基础Qt直接提供网络编程模块,基于TCP/IP客户端和服务器相关各种类。TCP通信(QTcpSocket/QTcpServer)。UDP通信(QUdpSocket)。还有部分实现HTTP、FTP等网络协议的高级类。如QNetworkRequest/QNetworkAccessManager等。我们开发过程中,UDP、TCP、HTTP通信类等,必须在程序......