C++ QtRPT连接错误,没有对reportWindow::connect的匹配函数调用
我正在尝试将QtRPT实现为我的qt程序的报告生成器。 我很难找到任何QtRPT选择的教程。以下方法来自一家西班牙公司制作的教程: 这是我初始化变量的地方: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();
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 ¶mValue,
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 ¶mValue, 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 ¶mValue, 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;
}
}