• 7360阅读
  • 5回复

[提问]QT中自定义信号出错[已解决] [复制链接]

上一主题 下一主题
离线xxzxlx
 
只看楼主 倒序阅读 楼主  发表于: 2011-09-18
我是一个QT的初学者,第一次发帖~可能问题比较低级,请给指点下 谢谢!!
现在我想实现在dockWindow中点击鼠标右键快捷菜单的功能。因为不知道有什么好的办法,我尝试自定义几个信号
//rightbutton Menu
connect(m_deleteAction,SIGNAL(triggered()),this,SLOT(rightButtonMenuDelete()));

connect(this,SIGNAL(sendRightButtonDelete(QTreeWidgetItem*)),m_osgWidget,SLOT(removeMapLayer(QTreeWidgetItem*)));
void MyDockWindow::rightButtonMenuDelete()
{
     QTreeWidgetItem *item = m_dockTree->itemAt(QCursor::pos());
     emit sendRightButtonDelete(item);

}
结果在
bool OSGWidget::removeMapLayer(QTreeWidgetItem *item)
{
     QString itemText = item->text(0);
。。。。。
}
出错



参考
connect(m_dockTree,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),m_osgWidget,SLOT(removeMapLayer(QTreeWidgetItem*)));这个connect没问题,
//add item
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0,getFileName(fileName));

m_MyDockWindow->getDockTree()->addTopLevelItem(item);

离线jdwx

只看该作者 1楼 发表于: 2011-09-18
回 楼主(xxzxlx) 的帖子
在可能出问题的地方加断点调试,单步运行,就知道哪行有问题。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线xxzxlx
只看该作者 2楼 发表于: 2011-09-19
谢谢 好像不关传递消息的事
请问我想获得右键点击时所在的item应该怎么取得
QTreeWidgetItem *item = m_dockTree->itemAt(QCursor::pos());
QString text = item->text(0);//这句就出错了~~~
离线午小夜

只看该作者 3楼 发表于: 2011-09-19
不管是右键还是左键,不管是单击或者双击,只要点击了,就会有itemClicked信号发出来,只要connect了QTreeWidget的这个信号就可以了
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线ppdayz

只看该作者 4楼 发表于: 2011-09-20
楼上解释的很清楚了,你在任何地方双击了,就发了信号,但是QTreeWidgetItem *item = m_dockTree->itemAt(QCursor::pos());这个鼠标在的地方不一定有item,所以这个item是个空的,用item->text(0)就会报空指针
做个判断就可以了
if(item != 0){
    emit ...
}
离线jptiancai

只看该作者 5楼 发表于: 2011-09-20
楼上说的很清楚!!   
  学习啦
快速回复
限100 字节
 
上一个 下一个