• 8650阅读
  • 15回复

使用Style sheet控制界面显示 [复制链接]

上一主题 下一主题
离线jorneyr
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-24
使用Style Sheet可以很简单的控制界面的效果,而且修改的效果可以立即看得到,比自己去继续实现相关的类方便很多。
下面是同一程序在Windows与Mac的表现,除了标题栏和边框,字体外,其他的效果几乎一样。





离线jorneyr

只看该作者 1楼 发表于: 2011-10-24
其实还有很多细节问题,在Mac上没发现,一到Windows里就能很容易看出来
1. 为什么滚动条要这么粗?
没办法,Qt的style sheet对圆角的支持还不完美,不能做到很圆,所以只好粗一点看上去圆角的效果会好一些

2. 字体不一样?
是的,给忘了设置字体了,所以就默认使用了系统的字体

3. QComboBox在Mac下很齐,在Windows下有点不齐
看来更多细节得针对系统再微调一下,让其表现更一致

4. 还有一个问题是滚动条的下面,在Mac里那个边框没问题, 在Windows下却没有,追求完美实现的人就继续去累死吧,我是没兴趣了。

5. 被选中的虚线框
哎,一大难题
离线afeng2011
只看该作者 2楼 发表于: 2011-10-24
请问左边那一列使用qt哪个类实现的
离线jdwx

只看该作者 3楼 发表于: 2011-10-24
回 2楼(afeng2011) 的帖子
估计是自制的控件,不是经过美化的QToolBar。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线weihua1984

只看该作者 4楼 发表于: 2011-10-24
想问楼主,你在tablewidget或者tableview中的item中如何显示图片啊
我想继承QTableWidgetItem但是没有paintevent。不清楚如何重绘
离线jdwx

只看该作者 5楼 发表于: 2011-10-24
回 4楼(weihua1984) 的帖子
tablewidget,只要塞进去一个能显示图片的widget就可以了,如QLabel
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线weihua1984

只看该作者 6楼 发表于: 2011-10-24
哦,谢谢
离线jorneyr

只看该作者 7楼 发表于: 2011-10-24
引用第2楼afeng2011于2011-10-24 13:23发表的  :
请问左边那一列使用qt哪个类实现的

一个QWidget+QToolButton实现的,再使用图标和Style sheet调整界面的显示效果
离线jorneyr

只看该作者 8楼 发表于: 2011-10-24
引用第4楼weihua1984于2011-10-24 14:13发表的  :
想问楼主,你在tablewidget或者tableview中的item中如何显示图片啊
我想继承QTableWidgetItem但是没有paintevent。不清楚如何重绘

因为效率和显示效果的原因,我没有使用QTableWidget,而是使用QTableView+Model+自定义的QStandardItem+QStandardItemDelegate实现数据和图标的显示:图标是动态加载,只有在第一次请求显示时才加载。


有空我会慢慢的把这些实现方法写出来,可以参考一下。
离线jorneyr

只看该作者 9楼 发表于: 2011-10-24
http://www.cppblog.com/biao/archive/2011/10/23/158940.html
这是昨天写的拖拽图片到程序中并显示,也是这个程序中用到的一个功能。
为了简单起见,每个功能的实现都会分开成一个单独的工程。
离线jorneyr

只看该作者 10楼 发表于: 2011-10-24
引用第2楼afeng2011于2011-10-24 13:23发表的  :
请问左边那一列使用qt哪个类实现的

刚刚写了侧栏实现的方法,http://www.cppblog.com/biao/archive/2011/10/24/158986.html
离线begboy

只看该作者 11楼 发表于: 2011-10-25
引用第1楼jorneyr于2011-10-24 11:21发表的  :
其实还有很多细节问题,在Mac上没发现,一到Windows里就能很容易看出来
1. 为什么滚动条要这么粗?
没办法,Qt的style sheet对圆角的支持还不完美,不能做到很圆,所以只好粗一点看上去圆角的效果会好一些
2. 字体不一样?
.......



还有标题栏内容,Mac在中间,Win会在左边。
离线ppdayz

只看该作者 12楼 发表于: 2011-10-25
回 10楼(jorneyr) 的帖子
10. Qt Designer里的工作都已经完成了,运行程序的效果如上图,但是我们想动态的实现当按钮被按下后显示按钮的按下状态而其他按钮恢复常态,需要使用程序去改变按钮的current属性值。

其实可以把这些button设置成一组QButtongroup,然后每个button都button->setCheckable(true);
默认选中的就设置button->setChecked(true); 其他的false

然后style sheet 设置的时候
QToolButton:pressed {

}
QToolButton:checked{
}

就可以了
离线jorneyr

只看该作者 13楼 发表于: 2011-10-25
Re:回 10楼(jorneyr) 的帖子
引用第12楼ppdayz于2011-10-25 15:39发表的 回 10楼(jorneyr) 的帖子 :
10. Qt Designer里的工作都已经完成了,运行程序的效果如上图,但是我们想动态的实现当按钮被按下后显示按钮的按下状态而其他按钮恢复常态,需要使用程序去改变按钮的current属性值。
其实可以把这些button设置成一组QButtongroup,然后每个button都button->setCheckable(true);
默认选中的就设置button->setChecked(true); 其他的false
.......

这个方法好,马上去改掉,谢谢
离线jorneyr

只看该作者 14楼 发表于: 2011-10-25
Re:回 10楼(jorneyr) 的帖子
引用第12楼ppdayz于2011-10-25 15:39发表的 回 10楼(jorneyr) 的帖子 :
10. Qt Designer里的工作都已经完成了,运行程序的效果如上图,但是我们想动态的实现当按钮被按下后显示按钮的按下状态而其他按钮恢复常态,需要使用程序去改变按钮的current属性值。
其实可以把这些button设置成一组QButtongroup,然后每个button都button->setCheckable(true);
默认选中的就设置button->setChecked(true); 其他的false
.......

很不错的想法, 可惜最后对于我的应用满足不了要求。
因为侧栏的按钮点击后会切换中心区域的widget,但每个中心区域的widget都要求用户有对应的权限才能打开,如果没有权限同时按钮的状态不会改变。
如果设置为checkable,只要按下就会设置其状态为checked。
离线ppdayz

只看该作者 15楼 发表于: 2011-10-26
回 14楼(jorneyr) 的帖子
权限问题么Disable掉就行了,而且disable比较明显
快速回复
限100 字节
 
上一个 下一个