• 6154阅读
  • 8回复

[提问]继承的QtreeWidgetItem类希望能够得到QTreewidget的信号 [复制链接]

上一主题 下一主题
离线zy_zlj
 

只看楼主 倒序阅读 楼主  发表于: 2013-02-18
QCustomTreeWidgetItem 继承自QTreeWidgetItem,希望能够得到QTreewidget发出的信号比如ItemChanged,但是itemchanged的信号参数是QTreeWidgetItem,如果强制connect就会产生内存错误,请问怎么才能解决这个问题
离线zy_zlj

只看该作者 1楼 发表于: 2013-02-18
有人来指导指导吗
离线pxiao_xiao

只看该作者 2楼 发表于: 2013-02-19
在你处理ItemChanged信号的槽里 强制将QTreeWidgetItem转化成QCustomTreeWidgetItem
离线zy_zlj

只看该作者 3楼 发表于: 2013-02-19
回 2楼(pxiao_xiao) 的帖子
不行的,在没有收到itemchanged的信号之前,程序就挂掉了
离线pxiao_xiao

只看该作者 4楼 发表于: 2013-02-19
可以呀......

QTreeTest::QTreeTest(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);


    ui.treeWidget->setColumnCount(1);
    QList<QTreeWidgetItem *> items;
    for (int i = 0; i < 10; ++i)
        items.append(new QCustomTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
    ui.treeWidget->insertTopLevelItems(0, items);
    connect(ui.treeWidget , SIGNAL(itemClicked ( QTreeWidgetItem * , int  )) , this , SLOT(doSomething(QTreeWidgetItem * , int)));
    connect(ui.treeWidget , SIGNAL(itemChanged ( QTreeWidgetItem * , int  )) , this , SLOT(hasChangde(QTreeWidgetItem * , int)));
}


QTreeTest::~QTreeTest()
{


}


void QTreeTest::doSomething(QTreeWidgetItem * item, int column)
{
    QString str("changed");
    item->setData ( column, 0, str);
}


void QTreeTest::hasChangde(QTreeWidgetItem * item, int column)
{
    ((QCustomTreeWidgetItem *)item) ->useMe();
}


QCustomTreeWidgetItem::QCustomTreeWidgetItem ( QTreeWidget * parent, const QStringList & strings)
: QTreeWidgetItem(parent , strings)
{
    
}
QCustomTreeWidgetItem::~QCustomTreeWidgetItem()
{
    
}
void QCustomTreeWidgetItem::useMe()
{
    QString str;
    str.sprintf("%5d" , 4);
}


---------------------------------------------
useMe是能进入的并执行的
离线zy_zlj

只看该作者 5楼 发表于: 2013-02-19
回 4楼(pxiao_xiao) 的帖子
我这里只要connect过,然后点击tree,就会挂掉了
离线pxiao_xiao

只看该作者 6楼 发表于: 2013-02-19
代码呢?
离线realfan

只看该作者 7楼 发表于: 2013-02-19
用qRegisterMetaType试试
离线realfan

只看该作者 8楼 发表于: 2013-02-20
Q_DECLARE_METATYPE(QCustomTreeWidgetItem);
qRegisterMetaType<QCustomTreeWidgetItem>( );


connect(....)
快速回复
限100 字节
 
上一个 下一个