我有这个功能:
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();
}
所以它允许在数据库中插入一篇文章,它需要4个参数,
我想将它附加到一个信号如下:
连接(UI >pb_add_art,SIGNAL(clicked(bool)),this,SLOT(inserer_art(int,QString,QString,QString)));
t不起作用,因为信号没有与插槽相同的参数,我怎么能这样做,我认为有一个映射技巧(Qsignalmapper)但我不确定。
答案 0 :(得分:1)
插槽采用信号发出的参数。您似乎试图将外部参数插入到插槽中,就像普通函数一样。你不能这样做。
尝试使用Lambda样式连接。这样你就可以发出信号,但不是调用一个插槽而是执行封闭的代码(这段代码就是你的插槽!)。
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();
});
在此示例代码中,当单击按钮ui-> pb_add_art时,将执行引用您的参数的附带代码。