C++ QtRPT连接错误,没有对reportWindow::connect的匹配函数调用

C++ QtRPT连接错误,没有对reportWindow::connect的匹配函数调用,c++,qt,report,connect,C++,Qt,Report,Connect,我正在尝试将QtRPT实现为我的qt程序的报告生成器。 我很难找到任何QtRPT选择的教程。以下方法来自一家西班牙公司制作的教程: 这是我初始化变量的地方: while(q.next()){ check_no = q.value(0).toString(); alobs_no=q.value(1).toString(); payee=q.value(2).toString(); bank_account_no = q.value(10).toString();

我正在尝试将QtRPT实现为我的qt程序的报告生成器。 我很难找到任何QtRPT选择的教程。以下方法来自一家西班牙公司制作的教程:

这是我初始化变量的地方:

while(q.next()){
    check_no = q.value(0).toString();
    alobs_no=q.value(1).toString();
    payee=q.value(2).toString();
    bank_account_no = q.value(10).toString();
    bank_name = q.value(9).toString();
    cancelled = q.value(7).toInt();
    amount = q.value(5).toDouble();
    date = q.value(26).toString();
    date_breakdown = date.split("/");
    month = date_breakdown.at(0).toInt();
    day = date_breakdown.at(1).toInt();
    year = date_breakdown.at(2).toInt();
    date_of_check.setDate(year,month,day);
    //total = q.value(0).toString();

    //ui->checksEntry_tbl->data
    certifier = q.value(11).toString();
    certifier_pos = q.value(17).toString();
    deliverer = q.value(13).toString();
    deliverer_pos = q.value(19).toString();
    approver = q.value(12).toString();
    approver_pos = q.value(18).toString();
    //total_amount = q2.value(3).toDouble();

}

q.finish();
q2.finish();
这是我将程序连接到QtDesigner创建的xml的部分,也是问题的根源:

//QTRPT writing phase
QtRPT *report = new QtRPT(this);
report->loadReport(":/acic_report.xml");
report->recordCount.append(rowtablecount);

connect(report, &QtRPT::setValue, [&](const int recNo,
        const QString paramName, QVariant &paramValue,
        const int reportPage) {
    (void) reportPage;
    if(paramName == "dateprep"){
        paramValue = date_prepared;
    }
    if(paramName == "acic"){
        paramValue = acic_no;
    }
    if(paramName == "fund"){
        paramValue = fund_type;
    }
    if(paramName == "bankaccnt"){
        paramValue = bank_account_no;
    }
    if(paramName == "bankname"){
        paramValue = bank_name;
    }
    if(paramName == "ALOBS No."){
        paramValue = alobs_no;
    }
    if(paramName == "Check No."){
        paramValue = check_no;
    }
    if(paramName == "Payee"){
        paramValue = payee;
    }
    if(paramName == "Check Date"){
        paramValue = date_of_check;
    }
    if(paramName == "Amount"){
        paramValue = amount;
    }
    if(paramName == "Total"){
        paramValue = total_amount;
    }
    if(paramName == "totalwords"){
        paramValue = pesoword;
    }
    if(paramName == "ccname"){
        paramValue = certifier;
    }
    if(paramName == "ccpos"){
        paramValue = certifier_pos;
    }
    if(paramName == "appname"){
        paramValue = approver;
    }
    if(paramName == "apppos"){
        paramValue = approver_pos;
    }
    if(paramName == "delivname"){
        paramValue = deliverer;
    }
    if(paramName == "delivpos"){
        paramValue = deliverer_pos;
    }
});      //<--------------- ERROR HERE
report->printExec();
我是qt的新手,但我可以从stackoverflow中的错误和一些研究中看出,connect在其参数中需要指针,而
report
setValue
都是指针

是什么导致了这个错误?输入数据时使用的if语句<代码>设置值自身


另外,作为旁注,是否有更好的QtRPT实现,或者可能有一个显示一些示例代码的站点?奇怪的是,站点中似乎没有任何内容。

我相信您用错误的方式调用QtRpt生成器,请尝试以下操作:

    connect(ui->printButton, SIGNAL(clicked()), this, SLOT(PrintReport()));


void YourApp::PrintReport() {
        QString reportTemplate = "myreport.xml";
        QtRPT *report = new QtRPT(this);
        report->loadReport(reportTemplate );
        // Use this only if you are going to print from table
        report->recordCount << ui->tableView->rowCount(); 



        QObject::connect(report, SIGNAL(setValue(const int, const QString, QVariant&, const int)),
                                    this,     SLOT(setValue(const int, const QString, QVariant&, const int)));
        report->printExec();
    }



void YourApp::setValue(const int recNo, const QString paramName, QVariant &paramValue, const int reportPage) {
if(paramName == "dateprep"){
        paramValue = date_prepared;
    }
    if(paramName == "acic"){
        paramValue = acic_no;
    }
    if(paramName == "fund"){
        paramValue = fund_type;
    }
    if(paramName == "bankaccnt"){
        paramValue = bank_account_no;
    }
    if(paramName == "bankname"){
        paramValue = bank_name;
    }
    if(paramName == "ALOBS No."){
        paramValue = alobs_no;
    }
    if(paramName == "Check No."){
        paramValue = check_no;
    }
    if(paramName == "Payee"){
        paramValue = payee;
    }
    if(paramName == "Check Date"){
        paramValue = date_of_check;
    }
    if(paramName == "Amount"){
        paramValue = amount;
    }
    if(paramName == "Total"){
        paramValue = total_amount;
    }
    if(paramName == "totalwords"){
        paramValue = pesoword;
    }
    if(paramName == "ccname"){
        paramValue = certifier;
    }
    if(paramName == "ccpos"){
        paramValue = certifier_pos;
    }
    if(paramName == "appname"){
        paramValue = approver;
    }
    if(paramName == "apppos"){
        paramValue = approver_pos;
    }
    if(paramName == "delivname"){
        paramValue = deliverer;
    }
    if(paramName == "delivpos"){
        paramValue = deliverer_pos;
    }
}
connect(用户界面->打印按钮,信号(点击()),此,插槽(打印报告());
作废YourApp::PrintReport(){
QString reportTemplate=“myreport.xml”;
QtRPT*报告=新QtRPT(本);
报表->加载报表(报表模板);
//仅当要从表中打印时才使用此选项
报表->记录计数表视图->行计数();
QObject::connect(报告、信号(设置值(常量int、常量QString、QVariant&、常量int)),
这个插槽(setValue(const int,const QString,QVariant&,const int));
报表->打印执行();
}
void YourApp::setValue(const int recNo、const QString paramName、QVariant¶mValue、const int reportPage){
如果(paramName==“dateprep”){
paramValue=编制日期;
}
如果(参数名=“acic”){
参数值=acic_编号;
}
如果(参数名称=“基金”){
paramValue=基金类型;
}
如果(参数名称==“银行账户”){
参数值=银行账户号;
}
如果(参数名称==“银行名称”){
参数值=银行名称;
}
如果(参数名=“ALOBS编号”){
参数值=alobs_no;
}
如果(参数名称=“检查编号”){
参数值=检查编号;
}
如果(参数名称=“收款人”){
参数值=收款人;
}
如果(参数名称=“检查日期”){
paramValue=检查日期;
}
如果(参数名称=“金额”){
参数值=金额;
}
如果(参数名=“总计”){
参数值=总金额;
}
如果(参数名=“totalwords”){
paramValue=pesoword;
}
如果(paramName==“ccname”){
参数值=证明人;
}
如果(参数名称=“CCPO”){
参数值=证明人位置;
}
如果(paramName==“appname”){
参数值=批准人;
}
如果(参数名==“apppos”){
paramValue=批准人\职位;
}
if(paramName==“deliverName”){
参数值=发货人;
}
如果(paramName==“DeliverPos”){
参数值=发货人位置;
}
}
    connect(ui->printButton, SIGNAL(clicked()), this, SLOT(PrintReport()));


void YourApp::PrintReport() {
        QString reportTemplate = "myreport.xml";
        QtRPT *report = new QtRPT(this);
        report->loadReport(reportTemplate );
        // Use this only if you are going to print from table
        report->recordCount << ui->tableView->rowCount(); 



        QObject::connect(report, SIGNAL(setValue(const int, const QString, QVariant&, const int)),
                                    this,     SLOT(setValue(const int, const QString, QVariant&, const int)));
        report->printExec();
    }



void YourApp::setValue(const int recNo, const QString paramName, QVariant &paramValue, const int reportPage) {
if(paramName == "dateprep"){
        paramValue = date_prepared;
    }
    if(paramName == "acic"){
        paramValue = acic_no;
    }
    if(paramName == "fund"){
        paramValue = fund_type;
    }
    if(paramName == "bankaccnt"){
        paramValue = bank_account_no;
    }
    if(paramName == "bankname"){
        paramValue = bank_name;
    }
    if(paramName == "ALOBS No."){
        paramValue = alobs_no;
    }
    if(paramName == "Check No."){
        paramValue = check_no;
    }
    if(paramName == "Payee"){
        paramValue = payee;
    }
    if(paramName == "Check Date"){
        paramValue = date_of_check;
    }
    if(paramName == "Amount"){
        paramValue = amount;
    }
    if(paramName == "Total"){
        paramValue = total_amount;
    }
    if(paramName == "totalwords"){
        paramValue = pesoword;
    }
    if(paramName == "ccname"){
        paramValue = certifier;
    }
    if(paramName == "ccpos"){
        paramValue = certifier_pos;
    }
    if(paramName == "appname"){
        paramValue = approver;
    }
    if(paramName == "apppos"){
        paramValue = approver_pos;
    }
    if(paramName == "delivname"){
        paramValue = deliverer;
    }
    if(paramName == "delivpos"){
        paramValue = deliverer_pos;
    }
}