我正在制作一个将字符串转换为二进制的转换器,并且我想将结果二进制转换结果的每个第8个字符的颜色更改为红色,以表示每个ascii字符的开头。用户输入文本输入的字符串,转换后的结果将显示在文本区域中,如下所示:
每个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时无效。
答案 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");
}
}