QT如何自毁滚动条

enic 2011-10-10 04:49:58
在win32里边直接拦消息,送个画刷进去就够了,,,

QT的滚动条是作为一个控件的,实现QAbstractSlider接口。
我用MFC的思维,从QScrollBar继承一个QMyScrollBar出来,然后给set到QScrollArea看效果。

QMyScrollBar只是重载paint时间,很显然这是不够的,在MFC中可以直接传入一个画刷进去就够了,这里好像很麻烦。

后来去看qt的源代码,牵扯到一个QStyle的东西


我对qt没过多深入研究,请高人解惑,或者直接告诉我这个要怎么做才能自毁滚动条?
...全文
178 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
enic 2011-10-11
  • 打赏
  • 举报
回复
不要什么style支持,应为可能我一个程序中就要很多种不同的效果,也不需要根据平台自适应。
enic 2011-10-11
  • 打赏
  • 举报
回复
那自绘咋整?

我就是希望要想MFC里边一样自绘滚动条的效果,,,
enic 2011-10-11
  • 打赏
  • 举报
回复
查了下资料

没有虚函数的情况叫隐藏

囧,是我用错了,,,
dbzhang800 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cl_gamer 的回复:]

1. 建议熟悉一下 override 和 overload 的具体含义。比如:


没必要扣这些字眼,我已经解释过了,,,
可能是我接触的大部分人和资料都说“虚函数重载”不说“虚函数覆盖”,,,
我理解的重载是两种,包括虚函数重载和参数重载
[/Quote]
这个你倒是真的可以简单罗列一下。哪些书或资料是这么说的(最好不是国内原创的书籍。翻译的可以列)。

不是抠字眼,override 和 overload 本就是不同的东西。(如果我理解错了,你可以反驳)
enic 2011-10-11
  • 打赏
  • 举报
回复
1. 建议熟悉一下 override 和 overload 的具体含义。比如:


没必要扣这些字眼,我已经解释过了,,,
可能是我接触的大部分人和资料都说“虚函数重载”不说“虚函数覆盖”,,,
我理解的重载是两种,包括虚函数重载和参数重载
bingcaihuang 2011-10-11
  • 打赏
  • 举报
回复
不断增加计数……
dbzhang800 2011-10-11
  • 打赏
  • 举报
回复
1. 建议熟悉一下 override 和 overload 的具体含义。比如:

http://en.wikipedia.org/wiki/Method_overriding

Method overriding, in object oriented programming, is a language feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its superclasses or parent classes.

2. 肯定要处理很多东西,不然自定义一个style也就不会这么困难了。但绘制肯定是在paintEvent中做的,在该函数内QStyleOption种应该有你需要的绝大多数信息。

当然,如果你不考虑使用stylesheet或style的话,自己画会简单很多(毕竟不用考虑平台一致性等等众多的东西)。
enic 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbzhang800 的回复:]
引用 2 楼 cl_gamer 的回复:

大神都不屑这些简单东东么

估计大家看不懂你想问什么吧,比如


引用楼主 cl_gamer 的回复:

重载paint时间,很显然这是不够的

首先,你指的应该是 override 而不是 overload (重载)。
其次,你不妨说,为什么认为不够
[/Quote]

1.简单的说要重绘滚动条,比如我用了一个蓝色背景的widget,我希望滚动条也是蓝色的。
2.override是覆盖,我没记错paintEvent是虚函数,是overload术语应该是没用错,否则改动是不会生效的。(如果不是虚函数,不是overload,试问系统如何才能调用到这里?假设是override,这个类型是我新加入的,QT的事件循环肯定是不知道这个类型的,我也没有设置任何信号槽,除非用汇编hack,不然也调用不到这个函数把,,,)
3.重绘滚动条要处理很多东西:
1)上下两个方块,滚动方块
2)处理鼠标滚动事件,鼠标移动事件,等等,这些都和绘图相关需要自己处理
3)背景色的处理
qt的源代码里边并没有直接封装好画某一个部分的函数,所以直接重载paintEvent是不行的。应该是有其他的方法,否则还不如自己写一个了。
dbzhang800 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cl_gamer 的回复:]

大神都不屑这些简单东东么
[/Quote]
估计大家看不懂你想问什么吧,比如

[Quote=引用楼主 cl_gamer 的回复:]

重载paint时间,很显然这是不够的
[/Quote]
首先,你指的应该是 override 而不是 overload (重载)。
其次,你不妨说,为什么认为不够
enic 2011-10-11
  • 打赏
  • 举报
回复
大神都不屑这些简单东东么
enic 2011-10-10
  • 打赏
  • 举报
回复
更正下:自毁 -> 自绘

坐等大神

16,215

社区成员

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

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