尝试连接两个小部件时,Qt应用程序崩溃
我正在尝试将一个插件创建的标签与我的应用程序中另一个插件创建的操作连接起来。所以,在我的应用程序找到并加载两个插件后,我尝试连接它们,然后应用程序崩溃尝试连接两个小部件时,Qt应用程序崩溃,qt,plugins,qt4,Qt,Plugins,Qt4,我正在尝试将一个插件创建的标签与我的应用程序中另一个插件创建的操作连接起来。所以,在我的应用程序找到并加载两个插件后,我尝试连接它们,然后应用程序崩溃 connect(myAction->getAction(), SIGNAL(triggered()),myLabel, SLOT(setLabelText())); myAction->getAction()-此方法返回已创建操作的指针 setLabelText()-必须更改标签文本 若我删除了那个一行,我的应用程序运行良好,动作被添加到
connect(myAction->getAction(), SIGNAL(triggered()),myLabel, SLOT(setLabelText()));
myAction->getAction()-此方法返回已创建操作的指针
setLabelText()-必须更改标签文本
若我删除了那个一行,我的应用程序运行良好,动作被添加到菜单中,标签在窗口上
返回操作的插件中的方法
QAction* ActionPlugin::newAction() {
myAction = new QAction("Show text",this);
return myAction;
}
QAction* ActionPlugin::getAction() {
return myAction;
}
返回标签的插件的方法
QLabel* LabelPlugin::newLabel() {
label = new QLabel("This plugin works");
return label;
}
void LabelPlugin::setTextforLabel() {
label->setText("This plugin works fine");
}
每次应用程序查找并加载插件时,它都会增加一个名为verify(一个整数)的变量,如果它的值是2,那么我就可以连接这两个小部件
if (verify == 2)
connect(myAction->getAction(), SIGNAL(triggered()),myLabel, SLOT(setLabelText()));
如果它在到达该行时崩溃,我想,从getAction
或myLabel
返回的指针未初始化,或者其他指针指向“永不着陆”。你能发布getAction()
的代码吗?在到达此语句之前,是否正在初始化myLabel?是否确实调用过“newAction”方法
添加qDebug(“创建的操作”)
beforereturnmyaction行
//编辑:
向我们展示您的加载程序代码,因为我可以清楚地看到,您当前的问题与您在前面的问题中“解决”的问题密切相关。对不起,我仍然无法说出发生了什么,但我要说的是,代码中有一些奇怪的所有权决定。QAction将由ActionPlugin拥有,但QLabel必须由newLabel()的调用方拥有。ActionPlugin实例是否在connect语句之前超出了范围,从而删除了它所拥有的QAction?另外,myAction
是ActionPlugin中的私有QAction实例的名称还是ActionPlugin的实例?