带参数的信号和插槽

时间:2017-12-13 14:02:33

标签: 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);
    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)但我不确定。

1 个答案:

答案 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时,将执行引用您的参数的附带代码。