关于QAction::setData用法问题

taianmonkey 2012-12-06 05:48:29
我们的工程中,必须在点击菜单时,传递一个自定义的实例对象,但是没有得到。各位看看错在哪里?
示例代码如下:

#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);
}
...全文
511 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdwx 2012-12-06
  • 打赏
  • 举报
回复
引用 2 楼 SalmonRun 的回复:
设置的是对象指针,取的却是对象
还是2楼看的仔细,+1 确实是传的指针,和我的想法一样。
姜菌 2012-12-06
  • 打赏
  • 举报
回复
设置的是对象指针,取的却是对象
jdwx 2012-12-06
  • 打赏
  • 举报
回复
建议查看关于QVariant的帮助信息,非Qt内置数据类需要经过特殊处理才能放进QVariant内。或者传个指针过去。

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧