QTextEdit частые обращения - PullRequest
       11

QTextEdit частые обращения

0 голосов
/ 01 апреля 2020

Я использую библиотеку libpcap. В классе есть некоторый метод, который запускает pcap_loop(...), после того, как я пытаюсь добавить полезную нагрузку пакета в QTextEdit, однако доступ к объекту слишком частый.

void SniffPackets::print_hex_ascii_line(const u_char *payload, int len, int offset)
{
    static int count = 0;
    int i;
    int gap;
    const u_char *ch;
    QString buf;
    /* offset */
    buf.sprintf("%05d   ", offset);
    fullPayloadStr.append(buf);

    /* hex */
    ch = payload;
    for(i = 0; i < len; i++) {
        buf.sprintf("%02x ", *ch);
        fullPayloadStr.append(buf);
        ch++;
        /* print extra space after 8th byte for visual aid */
        if (i == 7){
            buf.sprintf(" ");
            fullPayloadStr.append(buf);
        }
    }
    /* print space to handle line less than 8 bytes */
    if (len < 8){
        buf.sprintf(" ");
        fullPayloadStr.append(buf);
    }

    /* fill hex gap with spaces if not full line */
    if (len < 16) {
        gap = 16 - len;
        for (i = 0; i < gap; i++) {
            buf.sprintf("   ");
            fullPayloadStr.append(buf);
        }
    }
    buf.sprintf("   ");
    fullPayloadStr.append(buf);

    /* ascii (if printable) */
    ch = payload;
    for(i = 0; i < len; i++) {
        if (isprint(*ch)){
            buf.sprintf("%c", *ch);
            fullPayloadStr.append(buf);
        }
        else{
            buf.sprintf(".");
            fullPayloadStr.append(buf);
        }
        ch++;
    }
    count++;

    buf.sprintf("\n");
    fullPayloadStr.append(buf);
    if(count < 10){

    }
    else{
        ::payloadLog->appendPayload(fullPayloadStr);
        count = 0;
        fullPayloadStr.clear();
    }
return;
}

И метод, который добавляет некоторую информацию в QTextEdit:

void Payload::add(){
    //qDebug() << QThread::currentThreadId();
    ::plain->append(this->text);

    //    future2.cancel();
}

Все хорошо, но когда я касаюсь полосы прокрутки, мое приложение вылетает. Как я могу это исправить?

Кстати, я пытался использовать многопоточность и одновременность. Они не работали.

...