• 11507阅读
  • 2回复

向高手求助:如何重载Qt自带的函数(功能扩展) [复制链接]

上一主题 下一主题
离线qunero
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-24
遇到一个很棘手但又很有意义的问题:我想把checkBox和其他控件如pushButton的可用性(enable)联系起来,通过信号槽机制来实现交互。但是checkBox的信号stateChanged(int)的参数是int型,取值为012,而一般的控件的slot: setEnabled(bool)的参数是bool型的,所以我最终想到了重载函数void QWidget::setEnabled(bool enable)为void QWidget::setEnabled(int state),重载的代码实现如下(理论上可以正常工作的):
void QWidget::setEnabled(int state)
{
    if(Qt::Checked==state){
        this->setEnabled(true);
    }
    else if(Qt::Unchecked==state)
    {
        this->setEnabled(false);
    }
}
我分别向qwidget.h和qwidget.cpp中加入了相应部分:
1.前者加了:void setEnabled(int);
2.后者加入了:
void QWidget::setEnabled(int state)
{
    Q_D(QWidget);
    if(Qt::Checked==state){
        d->setEnabled(true);
    }
    else if(Qt::Unchecked==state)
    {
        d->setEnabled(false);
    }

}
使用qtcreator编辑时还比较方便,但运行程序是提示Object::connect: No such slot QComboBox::setEnabled(int) in ...
不知道是不是什么地方没有修改好。因为几乎所有的控件都从QWidget继承,若修改成功便能方便的控制其可用性了。我是初学者,望大家指点一下!
求助高手指点该如何设置,或者详细说明一下其他的可行的办法!谢谢! !!
我思故我在!
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-25
1. QCheckBox 本身就提供你需要的槽:
    void toggled ( bool checked )

   而 stateChanged(int) 是 QCheckBox 是三态时用的,按你上面所描述,显然是你误用了。

2. 即使一个控件没有你要的信号和槽,简单地子类化一下也就够了。
离线qunero

只看该作者 2楼 发表于: 2009-08-25
引用第1楼dbzhang800于2009-08-25 09:30发表的  :
1. QCheckBox 本身就提供你需要的槽:
    void toggled ( bool checked )
   而 stateChanged(int) 是 QCheckBox 是三态时用的,按你上面所描述,显然是你误用了。
.......

谢谢,目前可以进行下一步了!many thanks!
我思故我在!
快速回复
限100 字节
 
上一个 下一个