代码之家  ›  专栏  ›  技术社区  ›  Peter McG

如何继承和扩展C++的QualSaleWIDGET

  •  2
  • Peter McG  · 技术社区  · 15 年前

    目前QCalendarWidget只支持单选择或NoSelection。我希望能够编写一个小部件,它继承qt4.6.2中的QCalendarWidget,并为用户添加了选择一周中任何一天和选择自定义周的功能。

    e、 g.点击2010年8月5日星期四和从7月31日星期六到8月6日星期五(含)的所有日期进行选择。

    我使用的是gcc版本4.4.3(ubuntu4.4.3-4ubuntu5)和qt4.6.2

    1 回复  |  直到 15 年前
        1
  •  1
  •   andref    15 年前

    阅读QCalendarWidget之后 source code 可以

    首先,从QObject派生的类(包括小部件)不应该有复制构造函数。对此的解释 is here . QObject析构函数是虚拟的,所以不管你如何声明你的, it will be virtual too

    扩展类以更改其行为时,请查找虚拟函数。如果没有,很好地表明继承可能不是最好的方法。在本例中,我们有三种虚拟方法:

    virtual QSize sizeHint() const;
    virtual QSize minimumSizeHint() const;
    virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
    

    前两个是来自QWidget的virtual,负责调整widget的大小。它们可能并不重要。最后一个可能会做你想做的部分事情:当用户选择了一周中的某一天时,让整个星期都显示为选中状态。

    现在,对于可能的问题:

    选择模式属性是非虚拟的,而且是枚举值。不能扩展枚举类型以包含新建议的WeekSelection值。如果不必在运行时更改选择模式,则可以安全地忽略此属性,只使用周选择(忽略一个属性是一个很好的指示,你的小部件应该 一个QCalendarView而不是

    在某些情况下,您可以使用 findChildren() 通过改变属性和 installing event filters

    问问你自己新的小部件 从QCalendarWidget。如果没有,那么继承会让您陷入死胡同,请考虑复制QCalendarWidget的源代码并根据您的需要进行调整。你可以走得更远 clone the Qt source code ,更改原始小部件本身以包含您的行为,并向诺基亚提出合并请求。