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,同时希望能得到对实现该功能的一些指点,万分感激!