2012-09-29 2 views
0

selectall 쿼리로 db로부터 결과를 얻었으므로 배열에 결과를 저장하고 소켓으로 보내고 싶습니다.Qt 배열 QString

db.open(); 

QSqlQuery *selectall = new QSqlQuery(db); 
selectall->prepare("select * from phone_table"); 
selectall->exec(); 
selectall->first(); 
QString result; 
QByteArray arrayresult; 
int index = 0; 
while (selectall->next()) 
{ 
    index += 1; 
    // qint16 id = selectall->value(0).toString(); 
    QString name_ = selectall->value(1).toString(); 
    QString surname = selectall->value(2).toString(); 
    QString phone_number = selectall->value(3).toString(); 
    result = "*"+ name_+"*"+surname+"*"+phone_number; 
    arrayresult[index] = result; 
} 

나는 '='이 오류 바이너리 얻을 : 더 연산자는 유형 'const를 숯불 [16]'당신은 QString에 QByteRef을 설정하려고

답변

0

의 오른쪽 피연산자를 취하는를 찾을 수 없습니다.

QList와 arrayresult.append (결과)가 필요할 수도 있습니다. 또는 모든 결과의 concat가있는 QByteArray를 사용하려면 arrayresult + = result를 사용하십시오.

0

QByteArray을 초기화하려는 QString을 빌드 할 수 있습니다. 인코딩 라틴 경우 다음 QByteArrayQString 변환하려면

QByteArray array_ = string_.toLatin1(); 

을 할 수 있습니다.

당신은 양자 택일이 오버로드 기능입니다

QByteArray & QByteArray::append (const QString & str) 

추가 사용할 수 있습니다.

문자열 str을이 바이트 배열에 추가합니다. 유니 코드 데이터는 QString :: toAscii()를 사용하여 을 8 비트 문자로 변환합니다.

QString에 ASCII가 아닌 유니 코드 문자가 포함 된 경우이 함수를 사용하면 정보가 손실 될 수 있습니다. 응용 프로그램을 컴파일 할 때 QT_NO_CAST_TO_ASCII를 정의하여이 기능을 비활성화 할 수 있습니다. 그런 다음 데이터를 const char *로 변환하려면 QString :: toAscii() ( QString :: toLatin1() 또는 QString :: toUtf8() 또는 QString :: toLocal8Bit()) 을 명시 적으로 호출해야합니다.

append은 (는) + 연산자와 동일하게 동작합니다.

0

QStringtoLatin1() 기능으로 다음을 수행 할 수 있습니다.

// ... 

QString result = QString("*%1*%2*%3").arg(name_) 
             .arg(surname) 
             .arg(phone_number); 

QByteArray resultArray = result.toLatin1(); 
// Or ... 
// QByteArray resultArray = result.toLocal8Bit(); 
// QByteArray resultArray = result.toUtf8(); 

그리고 당신은 결과를 포함에 대한 QList< QByteArray >을 사용하여야한다, 또는 당신이 당신의 최종 결과 개체에 불과 append 마지막 결과 항목 수 있습니다.