关于QAction::setData用法问题
我们的工程中,必须在点击菜单时,传递一个自定义的实例对象,但是没有得到。各位看看错在哪里?
示例代码如下:
#include "customdefinedemo.h"
#include "qnewitem.h"
Q_DECLARE_METATYPE(QNewItem)
customDefineDemo::customDefineDemo(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
connect(ui.pushButton , SIGNAL(clicked()),this,SLOT(onBtnClick()));
}
customDefineDemo::~customDefineDemo()
{
}
void customDefineDemo::onBtnClick()
{
QMenu* pMenu = new QMenu();
QNewItem* pNewItem = new QNewItem();
qint16 nAge = 34;
QVariant qv;
do
{
QAction* pPortraitView = new QAction(tr("New"), this);
QAction* pAddGroup = new QAction(tr("Open"), this);
QAction* pDeleteGroup = new QAction(tr("Save"), this);
pNewItem->setUserInfo(tr("Eric"),nAge);
pPortraitView->setData( QVariant::fromValue((QObject*)pNewItem) ) ;
connect(pPortraitView,SIGNAL(triggered()),this,SLOT(triggeredMenuSendMsgContact()));
pMenu->addAction(pPortraitView);
pMenu->addAction(pAddGroup);
pMenu->addAction(pDeleteGroup);
pMenu->exec(QCursor::pos());
} while (false);
delete pMenu;
}
void customDefineDemo::triggeredMenuSendMsgContact()
{
QAction* pSendMsg= NULL;
QNewItem* pObj = NULL;
do
{
pSendMsg=qobject_cast<QAction*>(sender());
*pObj = pSendMsg->data().value<QNewItem>();
} while (false);
}