Как я могу конкатенировать 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*)