• 9217阅读
  • 8回复

用了itemDoubleClicked了以后,为什么signal响应不了呢? [复制链接]

上一主题 下一主题
离线winmo
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-15
我想大家一定用过 void QTreeWidget::itemDoubleClicked ( QTreeWidgetItem * item, int column )这个signal的

我想通过双击tree中的一个node,然后显示这个Node上所有client的ID list。
但是为什么用了item double clicked以后, clientlist还是没有响应?

    connect(ui.treeWidget,
        SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
        this,
        SLOT(on_getClientIDList(unsigned int)));
    }
————————————————————
void Client::on_getClientIDList(unsigned int NodeID)
{
    LOG_TRACE("Client::on_getClientIDList start");
    
    SAFESOAPCALL_START(return;)
    
    QStringList nameList;
    nameList.clear();
    std::list<std::string> ClientList;

    SAFESOAPCALL_OKONLY(getClientIDList(clientID, NodeID,ClientList),return;)
    QList<std::string> clients= QList<std::string>::fromStdList(ClientList);
    for (QList<std::string>::iterator it = clients.begin();
        it!= clients.end(); it++)
    { nameList.append((*it).c_str());
    }
    QStringListModel nameModel;
    nameModel.setStringList(nameList);
    ui.listView->setModel(&nameModel);
}

我是不是漏了什么?
怎么样可以双击node以后, 这个node的ID就直接到getclientidlist呢?

离线winmo
只看该作者 1楼 发表于: 2009-10-15
我是菜鸟。。。

itemDoubleClicked应该是直接可以拿来用的吧。

编译没有报错, 就是不能显示ID list

为什么呢?

我需不需要自己再定义一个slot给itemdouble clicked呢?
离线dbzhang800

只看该作者 2楼 发表于: 2009-10-15
    connect(ui.treeWidget,
        SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
        this,
        SLOT(on_getClientIDList(unsigned int)));
    }

你这儿信号和槽参数都不匹配
离线foxyz

只看该作者 3楼 发表于: 2009-10-15
connect(ui.treeWidget,
        SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
        this,
        SLOT(on_getClientIDList(unsigned int)));
    }
 参数都不匹配,怎么响应?????
改成
connect(ui.treeWidget,
        SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
        this,
        SLOT(on_getClientIDList(QTreeWidgetItem*, int)));
    }

定义里把slot function改成void on_getClientIDList(QTreeWidgetItem*, int)
离线winmo
只看该作者 4楼 发表于: 2009-10-15
哦~ 原来如此。

那就是我还要把QTreeWidgetItem转成 unsigned int NodeID?

可不可以比如说我自己定义一个itemclicked然后参数是用unsigned int NodeID
然后在这个itemclicked里面引用itemDoubleClicked(QTreeWidgetItem*, int)
离线foxyz

只看该作者 5楼 发表于: 2009-10-16
slot函数的参数一定要匹配signal的而不是倒过来
离线leon0356
只看该作者 6楼 发表于: 2009-10-16
我也想知道自己定义一个itemclicked的方法.
离线wsszlj

只看该作者 7楼 发表于: 2009-10-16
很容易让初学者 发狂的 问题
离线winmo
只看该作者 8楼 发表于: 2009-10-16
哦~~~
我理解slot必须和signal参数保持一致,

但是我slot的function需要的参数是node ID
那我是不是不需要在function里面再把item转换成nodeid

或者有没有办法直接在定义itemdoubleclicked的时候就把参数item定义成nodeID呢?
有什么方法么?
快速回复
限100 字节
 
上一个 下一个