0

我正在尝试在 QTextEdit 大写字母中制作所有文本,但目前失败了。这是我的代码,它什么也不做。

void MainWindow::on_actionCapital_triggered()
{
    QTextCharFormat capital2;
    capital2.setFontCapitalization(QFont::AllUppercase);
    ui->textEdit->setCurrentCharFormat(capital2);
}

我是一名 java 编码员,所以 c++ 不是我的强项

我也尝试了以下代码,但没有成功:

QFont font = ui->textEdit->font();
font.setCapitalization(QFont::AllUppercase);
ui->textEdit->setFont(font);

有人可以指出我正确的方向吗?

4

1 回答 1

0

我发现它不是最优雅的解决方案,但它会完成它的工作:

void MainWindow::on_actionCapital_triggered()
{
    QTextCursor c = ui->textEdit->textCursor();
    int current = c.position();
    if(capital)
    {
        QTextCharFormat capital2;
        capital2.setFontCapitalization(QFont::MixedCase);
        ui->textEdit->selectAll();
        ui->textEdit->setCurrentCharFormat(capital2);
        capital = false;
    }
    else
    {
        QTextCharFormat capital2;
        capital2.setFontCapitalization(QFont::AllUppercase);
        ui->textEdit->selectAll();
        ui->textEdit->setCurrentCharFormat(capital2);
        capital = true;
    }
    c = ui->textEdit->textCursor();
    c.setPosition(current);
    c.setPosition(current, QTextCursor::KeepAnchor);
    ui->textEdit->setTextCursor(c);
}

使用此代码,您可以在所有大写和混合大小写之间切换。出于某种原因,setCurrentCharFormat 仅在选择文本时才有效。所以我必须获取当前光标位置,然后选择所有应用 FontCapitalization,然后将光标设置回原来的位置。

于 2013-09-26T21:56:02.300 回答