QML / C ++为QString中的每第8个字符着色

时间:2019-05-07 19:41:07

标签: c++ qml

我正在制作一个将字符串转换为二进制的转换器,并且我想将结果二进制转换结果的每个第8个字符的颜色更改为红色,以表示每个ascii字符的开头。用户输入文本输入的字符串,转换后的结果将显示在文本区域中,如下所示:

pic

每个8号0或1应该为红色。

我不确定从哪里开始,甚至有可能吗?而且,如果我要反转转换器(用户输入二进制并将其转换为ASCII字符),它仍然可以工作吗?谢谢。

编辑:

我将"<font color='red'>" and "</font>"添加到每个第八个二进制数字的开头和结尾,但是显示的结果实际上是"<font color='red'>0</font>",它没有应用html样式。 每当用户使用C ++函数键入内容时,我的TextInput就会设置TextArea.text。

TextInput {     
...
    onTextChanged: {
        uiText.setBinaryString(myTextInput.text)
        myTextAreaText.text = uiText.getBinaryString()
    }
}

C ++函数

void UITextConnector::setBinaryString(QString s)
{
    binaryString = convertToBinary(s);
}

QString UITextConnector::getBinaryString()
{
    return binaryString;
}


QString UITextConnector::convertToBinary(QString qs)
{

    std::string resultString;

    if (binaryMode) {
        std::string qStringConverted = qs.toStdString();
        for (std::size_t i = 0; i < qStringConverted.size(); i++) {
            std::bitset<8> b(qStringConverted.c_str()[i]);
            std::string nextBinary = b.to_string();
            nextBinary = "<font color='#00AA00'>" + nextBinary.substr(0,1) + "</font>" + nextBinary.substr(1);
            resultString += nextBinary;
        }
    } else {

        std::string qStringConverted = qs.toStdString();
        for (std::size_t i = 0; i < qStringConverted.size() ; i = i + 8) {
           resultString += UITextConnector::strToChar(qStringConverted.substr(i, i+8).c_str());
        }
    }
    return QString::fromStdString(resultString);
}

但是,这仅在使用标签时有效,而在使用textArea时无效。

1 个答案:

答案 0 :(得分:0)

由于您未提供任何来源,也很难理解您失败的原因。无论如何,我会通过以下方式做到这一点:

TextArea {
    id: txt
    anchors.fill: parent
    anchors.margins: 10
    textFormat: TextEdit.RichText
    text: ""
    function setText(str)
    {
        var arr = str.match(/.{1,8}/g) || [];
        var result = "";
        for(var index in arr)
        {
           result += "<font color='red'>" + arr[index].substring(0, 1) + "</font>" + arr[index].substring(1);
        }
        txt.text = result;
    }

    Component.onCompleted: {
        txt.setText("aaaaaaaabbbbbbbbccccccccdddd");
    }
}