c++ - 在qt c ++ lambda Signal&Slots中通过引用传递类的实例不起作用
问题描述
Profile3.cpp 中的这段代码我只想传递 Kitchen_Data 类引用的实例 kitchenData,而不是按值传递,但它会打印
错误:未定义对“Profile3::Kitchen_DoubleClicked(Kitchen_Data&)”的引用
Profile3::Profile3(QWidget *parent) :
QWidget(parent),
ui(new Ui::Profile3)
{
ui->setupUi(this);
Kitchen_Data kitchenData;
connect(ui->treeWidget_Kitchen,
&QTreeWidget::itemDoubleClicked,
[&,this]{Kitchen_DoubleClicked (kitchenData);});
}
在 profile3.h 我有课
class Kitchen_Data{
public:
QString MealCode;
QString MealName;
QString MealPrice;
QString MealType;
QTreeWidgetItem * itemm_CancelButton_From_Kitchen ;
QVector <QString> KitechenItemPrice;
QVector <QString> KitechenItemName;
QString All_Added_ItemOfKitechen;
QString KitchenTotalPrice;
};
profile3 类的这个私有插槽和我想使用的函数将实例传递给
private slots:
void Kitchen_DoubleClicked(Kitchen_Data &Kitchen);
解决方案
正如评论中提到的,在 lambda 中传递对局部变量的引用是一个坏主意。当您从插槽内访问该实例时,该实例kitchenData
已经超出范围/被销毁。Kitchen_DoubleClicked
为了使它能够存活足够长的时间以供插槽使用,您需要动态分配它(例如Kitchen_Data* kitchenData = new Kitchen_Data;
),或者创建类kitchenData
的成员Profile3
,例如:
class Profile3 {
Kitchen_Data kitchenData;
// other members, methods, slots, etc...
};
推荐阅读
- ionic-framework - 图片未在 gmail 上使用社交分享插件分享
- python - 如何合并和更新熊猫数据框
- python - 如何为 Python 3.7.2 安装 Pycrypto?
- string - str_to_hive 函数将字符串的每个字符拆分为键
- sql - 在 where 子句中使用 if not exists
- javascript - Href 链接目标 在移动视图的同一选项卡中打开
- swift - 如何在我的 swift 框架中使用核心数据
- sql-server - sql server中的case和if子句
- sql - 无法绑定多部分标识符
- html5-canvas - 如何在 FabricJS 中缩放 ClipTo 区域?