Как я могу конкатенировать QStrings?
У меня проблема с печатью в Qt.
У меня есть HTML-код в переменных QString. В этом коде я хочу вставить данные из базы данных.
Я получаю сообщение об ошибке:
E:\apprendreQt\gestionstock6\vente.cpp:117: error: invalid operands of types
'const char*' and 'const char [27]' to binary 'operator+'
Как я могу это исправить?
Вот мой код:
int num_bl = ui->numeroBLlineEdit->text().toInt() ;
QString html;
QString requette = "select num_facture,date,nom,prenom,code_fiscale,designation,qte_out, prix,(qte_out * prix ) as Montant, sum(qte_out * prix) as Total from ventes join produits_en_ventes join clients join produits on ventes.vente_id = produits_en_ventes.vente_id and ventes.client_id = clients.client_id and produits_en_ventes.produit_id = produits.produit_id where ventes.client_id = :client_id ";
if(!m_db->isOpen())
QMessageBox::critical(this,tr("Inventoria Solution"),m_db->lastError().text()) ;
else{
m_query->clear();
m_query->prepare(requette);
m_query->bindValue(":client_id ", num_bl);
if(!m_query->exec())
QMessageBox::critical(this,tr("Inventoria Solution"),m_query->lastError().text()) ;
else{
html += " <table>"
"<thead>"
"<tr>"
"<th>N°</th>"
"<th>Désignation</th>"
"<th>Qte</th>"
"<th>Prix Unitaire</th>"
"<th>Montant</th>"
" </tr>"
"</thead>";
while(m_query->next())
{
int num_article = 1;
html += "<tr> <td>" + num_article + "</td> <td>"+m_query->value(5).toString()+"</td> <td>"+m_query->value(6).toInt() + "</td> <td>"+m_query->value(7).toInt() + "</td> <td>" + m_query->value(8).toInt() + "</td></tr>";
num_article++;
}
html += "<tfoot>"
"<tr>"
"<td>Total:"+ m_query->value(9).toInt()+"</td>"
"</tr>"
"</tfoot>"
"</table>";
}
print_Html(html);
}
Ответы
Ответ 1
Если вы используете operator+
, вам нужно предоставить QString в качестве аргумента, но вместо этого вы используете целочисленные значения: html += "<tr> <td>" + num_article
, где num_article
объявляется как целое. Вы можете заменить его, например: QString::number(num_article)
. То же самое в этой строке:
"<td>Total:"+ m_query->value(9).toInt()+"</td>"
следует заменить на
"<td>Total:"+ m_query->value(9).toString()+"</td>"
Ответ 2
Я не уверен в вашей ошибке. Однако AFAIK a Qstring не может быть объединен с int как таковым.
int myInt = 0;
QString text = "someString" + myInt; // WRONG
int myInt = 0;
QString text = "someString" + QString::number( myInt ); // CORRECT
или
int myInt = 0;
QString text = "someString" % QString::number( myInt ); // CORRECT
Ответ 3
в Qt5 вы можете использовать макрос QStringLiteral
для каждой строки, которая не нуждается в локализации, чтобы преобразовать все строковые литералы из const char*
(по умолчанию С++) в QString, это также сделает создание этих QStrings
более дешевым (для компиляторов, которые его поддерживают)
для Qt4 вы можете использовать конструктор QString(const char*)
или статическую функцию QString::fromAscii(const char*)