Qt qss中如何可以实现控件的样式更新?

振星 2015-07-24 10:21:08
各位大侠,请教一个问题,qss中如何可以实现控件的样式更新?

例如,有以下的一个应用场景:
一个QLineEdit 输入框:
当焦点失去后,会对之进行校验是否符合要求,如果不符合,这个输入框颜色等样式发生变化:

qss如下:

/* --------------------QLineEdit--------------------------*/
QLineEdit{border:1px solid #ddd; width:100%;font-size:14px;height:24px;line-height:24px;padding:4px;}
QLineEdit{border:1px solid #bbb;}
QLineEdit{border:1.3px solid #3bb4f2;}
QLineEdit:disabled,QLineEdit:disabled:focus{background-color:#ededed;border-color:#ddd;}
//////////这个是关键的地方
QLineEdit:如果是错误的话{background-color:#fbe2e2;border-color:#c66161;color:#c00;}


问题:应该如何在qss中写错误的那段标识?如何在程序中反应出这个样式?同时,当输入正确后,如何恢复正常的QLineEdit的样式?


在线等,谢谢

...全文
1861 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyangqingyun 2019-07-17
  • 打赏
  • 举报
回复
关联信号槽,在文本判断后重新设置qss
qq_42252246 2019-07-04
  • 打赏
  • 举报
回复
设置了属性,样式进行重载
landeaxm 2019-06-25
  • 打赏
  • 举报
回复
	m_label_okNg->setStyleSheet("QLabel{background:gray;color:white;font-size:36pt;font-weight:bold;} QLabel[ok=true]{background:green;} QLabel[ok=false]{background:red;}");
m_label_okNg->setProperty("ok", true);//ok的时候
m_label_okNg->setProperty("ok", false);//ng的时候
  • 打赏
  • 举报
回复
有这么麻烦的吗?....我做账号密码输入框的时候做过类似的,Qt有失去焦点的 信号(还是事件来着忘了),触发的时候自己去比对数据,通过是不是你要的数据来重新 setStyleSheet,重设的QSS要包含所有状态(hover press release focus里你需要的),重新选中的时候再重设为正常的QSS
as56961 2019-05-18
  • 打赏
  • 举报
回复 1
https://www.cnblogs.com/liuhan333/p/6776362.html 两句代码解决,给后人看
caiwei_cs 2016-02-23
  • 打赏
  • 举报
回复
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote] 我是设置属性,再重新载入样式表。
ennika 2016-02-03
  • 打赏
  • 举报
回复
楼主解决了么 求方法~~
王桑的一天 2015-07-31
  • 打赏
  • 举报
回复
lineEdit.update() ??
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
引用 6 楼 bsbsxll 的回复:
[quote=引用 3 楼 Esonpo 的回复:] 自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。 [/quote]
王桑的一天 2015-07-31
  • 打赏
  • 举报
回复
可以针对ObjectName设置QSS: lineEdit.setObjectName('normal') ------------------------ QSS 文件: QLineEdit#normal { background: ..............;} QLineEdit#error { background: ................;} ------------------------- 判断为错误时,设置一下 lineEdit.setObjectName('error') 不过我没试过,你试试这样行不行……
振星 2015-07-30
  • 打赏
  • 举报
回复
引用 3 楼 Esonpo 的回复:
自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
您好。 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。
振星 2015-07-30
  • 打赏
  • 举报
回复
引用 4 楼 llq108 的回复:
assistance里面有讲。
您好: 我看了您给的手册文档,但是我还是没有完成: 现在我针对样式设置了一个属性: QLineEdit[stated="true"]{background-color:#fbe2e2;border-color:#c66161;color:#c00} 如果在程序刚开始加载的时候,我设置setProperty("stated",true);,则这个控件就显示这个样的样式, 但是如果一开始QLineEdit的stated属性是false,然后我通过点击按钮后设置stated= true;则这个控件一点反应没有, 请问这个是为什么?我应该还是少一一些操作。。麻烦您了。
Creator_莫言 2015-07-24
  • 打赏
  • 举报
回复
QLineEdit怎么判断你的输入是否符合,这需要你自己判断。不符合你重新设置一下lineEdit的qss就行了
ronal7do 2015-07-24
  • 打赏
  • 举报
回复

assistance里面有讲。
寒山-居士 2015-07-24
  • 打赏
  • 举报
回复
自定义QSS属性, 去翻翻QSS帮助文档,看怎么自定义qss的属性 来控制
振星 2015-07-24
  • 打赏
  • 举报
回复
引用 1 楼 sddsighhz 的回复:
谢谢您的回复。 QLineEdit怎么判断你的输入是否符合,这需要你自己判断。不符合你重新设置一下lineEdit的qss就行了
如何判断,这个我是比较容易实现的,但是怎么重置呢?我希望重置后的样式是写在qss中的

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧