QPlainTextEdit设置为无包裹时换行换行

时间:2017-08-04 22:02:35

标签: c++ qt qplaintextedit

我正在尝试在PlainTextEdit小部件上显示ascii字符,但是我遇到了我的线突然被切成两半的问题。有一个\ n字符,我实际上希望文本开始一个新行,所以这个自动换行功能是不可取的。我已经尝试将自动换行和换行模式设置为NoWrap,但它仍会产生如下所示的相同的不良图像。由于专有原因,我无法显示所有文本,但实质上发生的是每个C应该是新行的开头。每行有80个字符,因此循环。小部件比文本的包装大得多,所以我真的不确定这里发生了什么。

Plain Text Edit Line Wrapping issue

uint8_t count = 0;
QString textualFileCharacterString;
char currentCharacter;
const char* currentCharacterPointer = &currentCharacter;
while (bytePosition < 3200)
{
    for(count = 0; count < 80; count ++)
    {
        file.seekg(bytePosition);
        file.read((char*)(&ASCIIorEBCDICchar[0]), BUF_LEN_1);
        if (EBCDICtoASCIIConvNeeded == TRUE)
            currentCharacter = ebc_to_ascii_table(ASCIIorEBCDICchar[0]); // file is encoded in EBCDIC
        else
            currentCharacter = ASCIIorEBCDICchar[0]; // file is encoded in ASCII

        // if(currentCharacter == 32)//Auto space formatting fix, if current character equals space it converts it to a dot
        //   currentCharacter = 46;

        textualFileCharacterString = QString::fromUtf8(currentCharacterPointer, ONE_BYTE); //converts ASCII value to usable QString
        ui->TextualFileHeaderPlainTextEdit->insertPlainText(textualFileCharacterString);
        count++;
        bytePosition++;
    }
    ui->TextualFileHeaderPlainTextEdit->insertPlainText("\n");
}
ui->TextualFileHeaderPlainTextEdit->setReadOnly(true);
ui->TextualFileHeaderPlainTextEdit->setLineWrapMode(QPlainTextEdit::NoWrap);
ui->TextualFileHeaderPlainTextEdit->setWordWrapMode(QTextOption::NoWrap);

编辑: 我尝试在循环之前添加这些代码行

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-‌​‌​8"));
    QTextCodec::ConverterState converterState(QTextCodec::DefaultConversion);
    QTextCodec::ConverterState* converterStatePointer = &converterState;

这些代码行,第一行将ASCII转换为字节数组,而第二行将字节数组转换为字符串(从另一个堆栈页面获取)。

 QByteArray byteArray = QTextCodec::convertFromUnicode(currentCharacterPointer, ONE_BYTE, converterStatePointer);  //0 indicates the conversion is stateless
 textualFileCharacterString = QTextCodec::codecForMib(1015)->toUnicode(byteArray);

我在第二行收到警告,但声明没有匹配的函数调用...

convertFromUnicode(const char*&, int, QTextCodec::ConverterState*&);

2 个答案:

答案 0 :(得分:0)

使用QString班级的fromAscii()方法

QString str = QString::fromAscii(currentCharacterPointer, ONE_BYTE);
  

返回使用第一个大小字符初始化的QString   string str。

     

如果size为-1(默认值),则将其视为qstrlen(str)。

     

请注意,尽管名称,此函数实际上使用编解码器   由QTextCodec :: setCodecForCStrings()定义,将str转换为   Unicode格式。根据编解码器的不同,它可能不接受有效的US-ASCII   (ANSI X3.4-1986)输入。如果没有设置编解码器,则此功能可以   与fromLatin1()相同。

答案 1 :(得分:0)

我认为QPlainTextEdit具有document()的{​​{1}}方法。

QTextDocument的第一个块具有块格式方法。块格式具有QTextDocument,您将其设置为True。

否则setNonBreakableLines()根框架的约束比您想象的要近。您可以获取rootframe()方法。然后,您可以检查框架的宽度。

据我所知,您的句子是出于任何原因。

1。易碎的塞特犬

2。简单地说明文档的框架宽度

据我所知。