Qt QWidget 设置样式表不生效的两种解决方案

这篇具有很好参考价值的文章主要介绍了Qt QWidget 设置样式表不生效的两种解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在进行Qt开发的时候,我们往往会遇到这样的场景:

        使用Qt Designer 设计界面,但在Qt Designer里设置好样式表,使用快捷键 shift + alt + r 进行预览,样式都是正常的,但程序运行起来,样式就不生效了。

例如设计一个列表,我们将一条数据(一行)设计设计成一个类。鼠标滑过(hover)会有高亮的效果。(免费下载地址https://download.csdn.net/download/xiezhongyuan07/87404417)

1.我们在Qt Designer 创建一个QWidget 的类,ObjectName取名为ItemFom。

Qt QWidget 设置样式表不生效的两种解决方案

 我们对ItemForm 设计的样式表如下,设置背景颜色与hover高亮

/*设置背景颜色*/


QWidget#ItemForm{
    
background-color:#2e3449;
    
border:none;

}

/*设置鼠标滑过会高亮*/


QWidget#ItemForm:hover{
    
background-color:#383e52;
    
border:none;

}



2. 我们这时候按下 shift + alt + r 进行预览的效果是正常的,如下:

Qt QWidget 设置样式表不生效的两种解决方案

3. 接着,我们在MainWindow里添加10个ItemForm:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 添加10条item作为测试
    initWidget();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::initWidget()
{
    // 去除原有的spacer
    ui->mainlayout->removeItem(ui->verticalSpacer);

    // 添加10条item
    for (int i = 0; i < 10; i++) {
        ItemForm *item = new ItemForm(this);
        item->setIndex(i + 1);
        ui->mainlayout->addWidget(item);
    }

    // 还原spacer
    ui->mainlayout->addItem(ui->verticalSpacer);
}

4. 我们运行一下看效果:

Qt QWidget 设置样式表不生效的两种解决方案

 把程序运行起来后,发现设计的样式表根本没有效果。


接下来我们给出来两种解决方案:

方案一:重绘子控件背景,在ItemForm 重新实现paintEvent方法

void ItemForm::paintEvent(QPaintEvent *event)
{
    QStylePainter painter(this);
    QStyleOption opt;
    opt.initFrom(this);
    opt.rect = rect();
    painter.drawPrimitive(QStyle::PE_Widget, opt);

    QWidget::paintEvent(event);
}

 实现的效果是这样的:

Qt QWidget 设置样式表不生效的两种解决方案

 这样就达到了我们的效果。有兴趣的小伙伴可以研究一下QWidget 控件的背景色设置的集中方式。


方式二:在QWidget 的界面上覆盖一层QFrame,样式表针对QFrame 进行设置:

Qt QWidget 设置样式表不生效的两种解决方案

 增加了QFrame,并将原有的ItemForm的样式表复制到frame的样式表:

QFrame{
    
color:white;
    
font-family: Microsoft YaHei;
    
font-size:14px;
    
background-color:#2e3449;

}

/*设置背景色*/


QFrame#frame{
    
background-color:#2e3449;
    
border:none;

}

/*设置hover高亮*/


QFrame#frame:hover{
    
background-color:#383e52;
    
border:none;

}



运行程序效果也是可以的

Qt QWidget 设置样式表不生效的两种解决方案文章来源地址https://www.toymoban.com/news/detail-409430.html

到了这里,关于Qt QWidget 设置样式表不生效的两种解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT打包的两种方式

    QT打包的两种方式: 一个是QT5自带的windeployqt(不需要下载安装),它可以找到程序(exe)用到的所有库文件,并且都拷贝到exe程序的当前文件。此时打包的exe较小,需要和拷贝进来的文件放一起运行,也可以将这些文件再次打包成一个大的exe文件,此时用的第二种打包方式

    2024年02月16日
    浏览(36)
  • qt创建线程的两种方法

    第一种:继承QThread类 方法描述 1。类MyThread继承QThread, 2。重载MyThread中的run()函数,在run()函数中写入需要执行的工作; 3。调用start()函数来启动线程。 不是真的跨线程,子线程ID和主线程ID是同一个 第二种:QObject::moveToThread 这就是我要的子线程 //用于托管我的子线程

    2024年04月27日
    浏览(24)
  • 解决Windows Defender安全中心打开空白的两种方案

    有网友加粉丝群询问自己的 Windows 10 操作系统中的 Windows Defender 安全中心打开后出现页面空白情况,而之前自己也没有碰到过这种问题。既然问题来了,那就帮助找下解决方案,目前网络上其实也有给出一些解决方案,绝大部分是通过注册表方式来进行解决。不过有些网友表

    2024年02月10日
    浏览(31)
  • Qt多线程使用的两种方式

    方式1 :继承自QThread类,重载run函数。此实现方法只有run()函数内的代码是运行在子线程内。 (不使用事件循环) 使用方法 : (1)run函数内有一个while或for的死循环(模拟耗时操作); (2)通过一个 标记位 来控制死循环的退出; (3)run()函数中无限循环记得 强制休息

    2023年04月10日
    浏览(34)
  • Android原生键盘弹起,H5页面被压缩的两种解决方案

    移动H5项目中,会出现input框获得焦点键盘弹出把页面元素顶上去压缩到一起,影响页面布局. 方案一:监听页面变化,动态的展示和隐藏底部被顶上来的内容 这种方法经调试还不算十分完美 方案二:监听页面变化,键盘弹起时将变化之前的高度赋值给压缩后的页面         这种

    2024年02月16日
    浏览(31)
  • Qt 测量文字展示尺寸的两种方式

    比如我想求字符串中最大的字符宽度,这个时候对每个字符的宽度求值肯定不是固定的,所以可以先用 MAXFLOAT 做约束,自适应宽度,代码如下: 某些情况下我想做文字的自动折行,指定了文本展示框的宽度之后,高度要通过折行策略达到自适应的效果:

    2024年02月06日
    浏览(43)
  • Qt中实现页面切换的两种方式

    在Qt中,可以使用QStackedWidget来实现两个UI界面的互相转换。QStackedWidget是一个堆叠窗口小部件,可以在其中添加多个子窗口,并且只显示其中一个子窗口。 注意:QStackedWidget只能用来装widget,不能装mainwindow!! ! 注意: 上面这种想法是错的! 下面这种想法才是对的! 注意

    2024年02月08日
    浏览(43)
  • 树莓派设置开机自启动的两种设置方式

    树莓派可通过两种方式来设置树莓派的开机自启动功能: 一、配置rc.local文件设置树莓派开机启动项 编辑/etc/rc.local文件 在文件中的 exit 0 之前添加需要执行的程序,注意要使用绝对路径,如下 特别注意,如果程序是阻塞的,则须加上     符号以在后台运行,否则系统无法启

    2023年04月20日
    浏览(60)
  • PPT“放映模式”的两种设置方法

    做好的PPT文件要如何放映呢?下面来说说设置PPT放映模式的两种方法。 方法一,直接在PPT文件里设置播放幻灯片。 1、打开PPT后,点击菜单栏【幻灯片放映】选项下的【设置幻灯片放映】。   2、弹出对话框后,根据需要选择不同放映方式,如幻灯片放映的页数、“手动放映

    2024年02月05日
    浏览(30)
  • PPT设置“只读模式”的两种方法

    想要防止PPT文件被意外更改,或者禁止他人随意更改,我们可以给PPT设置保护模式,而PPT的“只读模式”就起到了这样的作用。 ​具体的设置方法有两种,我们可以根据不同需求选择合适的方法。 方法一: 防止意外更改,起提醒作用,我们只需设置没有密码的“只读模式”

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包