Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带参数的信号和插槽_C++_Qt - Fatal编程技术网

C++ 带参数的信号和插槽

C++ 带参数的信号和插槽,c++,qt,C++,Qt,我有这个功能: void Accueil::inserer_art(int &row , QString &el1, QString &el2, QString &el3) { qDebug()<< el1 << el2 << el3 ; ui->tv_art->model()->setData(ui->tv_art->model()->index(row,1),el1);

我有这个功能:

void Accueil::inserer_art(int &row , QString &el1, QString &el2, QString &el3)
{
    qDebug()<< el1 << el2 << el3 ;
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,1),el1);
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,2),el2);
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,3),el3);
    ui->tv_art->model()->submit();
}
void Accueil::inserer\u art(国际和世界其他地区、QString和el1、QString和el2、QString和el3)
{
qDebug()设置数据(ui->tv_艺术->模型()->索引(第1行),el1);
用户界面->电视艺术->模型()->设置数据(用户界面->电视艺术->模型()->索引(第2行),el2);
用户界面->电视艺术->模型()->设置数据(用户界面->电视艺术->模型()->索引(第3行),el3);
用户界面->电视艺术->模型()->提交();
}
因此它允许在数据库中插入一篇文章,它需要4个参数, 我想将其附加到一个信号上,如下所示: 连接(ui
>pb_添加艺术、信号(点击(bool))、此、插槽(插入艺术(int、QString、QString、QString))


t不起作用,因为信号不采用与插槽相同的参数,我怎么能这样做,我认为有一个映射技巧(Qsignalmapper),但我不确定。

插槽采用信号发出的参数。您似乎试图像普通函数一样将外部参数插入插槽。你不能这样做

尝试使用Lambda样式的连接。有了它,您就发出了信号,但您只需执行封闭的代码,而不是调用插槽(该代码就是您的插槽!)

connect(ui->pb\u add\u art,&QPushButton::单击,[int&row,QString&el1,QString&el2,QString&el3,this]()
{
qDebug()设置数据(ui->tv_艺术->模型()->索引(第1行),el1);
用户界面->电视艺术->模型()->设置数据(用户界面->电视艺术->模型()->索引(第2行),el2);
用户界面->电视艺术->模型()->设置数据(用户界面->电视艺术->模型()->索引(第3行),el3);
用户界面->电视艺术->模型()->提交();
});

在本示例代码中,当单击按钮ui->pb\u add\u art时,将执行引用您的参数的附带代码。

请在堆栈溢出时使用英语编写(遗憾的是没有法语),否则可能会关闭,因此您可能需要翻译。此外,你编写的代码是C++,而不是C。这4个参数是如何生成的?我认为您希望将信号连接到另一个插槽(具有相同的信号签名),该插槽添加参数并调用您的函数。在连接线为SO的同一个函数中,如何将信号连接到另一个插槽请添加该代码(具有参数数据的函数的代码)因此,我们可以了解您试图做什么。这将需要Qt5。不确定OP是否仍在使用Qt4。它不工作,您使用的是什么版本的QT?什么不起作用?编译此代码时是否收到错误消息?需要更多信息。我仍然不明白为什么OP不能从add_article()调用inserer_art()。
connect(ui->pb_add_art, &QPushButton::clicked, [int &row , QString &el1, QString &el2, QString &el3, this]()
{
    qDebug()<< el1 << el2 << el3 ;
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,1),el1);
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,2),el2);
    ui->tv_art->model()->setData(ui->tv_art->model()->index(row,3),el3);
    ui->tv_art->model()->submit();
});