• 8097阅读
  • 1回复

继承QTreeWidget类后,在其中添加了鼠标事件后为什么原本的展开和收缩节点的功能都不能用? [复制链接]

上一主题 下一主题
离线1202216
 
只看楼主 正序阅读 楼主  发表于: 2007-07-17
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
1,我自己定义了一个继承自QTreeWidget的类MyQTreeWidget:
class MyQTreeWidget :    public QTreeWidget
{
    Q_OBJECT
public:
    MyQTreeWidget(QWidget * parent);
public:
    ~MyQTreeWidget(void);
private:
    //鼠标事件
    void mousePressEvent(QMouseEvent *);
signals:
        void clicked(int x,int y);
private slots:
        bool ChangeItemDisplayCondition(int x,int y);
};
2,我的目的是要在这个继承的树型控件中实现鼠标点击可修改节点显示状态(通过变换节点的ICON实现),所以首先需要得到鼠标点击点坐标,进而判断鼠标是否点在某节点的显示状态图标上。我添加了信号和槽如下CPP所示:
#include "MyQTreeWidget.h"

MyQTreeWidget::MyQTreeWidget(QWidget *parent = 0):QTreeWidget(parent)
{
    QObject::connect( this, SIGNAL( clicked(int,int) ), this, SLOT( ChangeItemDisplayCondition(int,int)) );  //信号连接
}

MyQTreeWidget::~MyQTreeWidget(void)
{
}
//鼠标事件
void MyQTreeWidget::mousePressEvent(QMouseEvent *e)
{   
    emit clicked(e->x(),e->y());
    //emit expandItem(QTreeWidgetItem *);
}
bool MyQTreeWidget::ChangeItemDisplayCondition(int x,int y)
{
//该处用来添加相应的控制显示状态代码,此处用MessageBox示例
    QMessageBox::information(this,"Mouse Down","Mouse Down on Tree Domain!");
    return true;
}
3,运行后信号和槽能很好通信,但是原来鼠标点击节点前的加号节点能展开的功能失效了,点击没反应,请问为什么?怎么解决?
4,同时希望能得到对实现该功能的一些指点,万分感激!
离线1202216
只看该作者 1楼 发表于: 2007-07-17
刚刚得到高手指点:
在鼠标事件函数中加一句QTreeWidget::mousePressEvent(e);
就可以了,这样以便于能把鼠标操作传QT内部,以实现节点扩展等功能,谢谢大家了
//鼠标事件
void MyQTreeWidget::mousePressEvent(QMouseEvent *e)
{   
    QTreeWidget::mousePressEvent(e);

    emit clicked(e->x(),e->y());
    //emit expandItem(QTreeWidgetItem *);
}
快速回复
限100 字节
 
上一个 下一个