Мне просто нужно знать, как изменить размер вкладки в Qt в QTextEdit. Мой поиск Google и /qaru.site/... вернул мне null. Спасибо заранее.
Как переопределить ширину табуляции в qt?
Ответ 1
Если вы хотите создать редактор исходного кода с помощью QTextEdit
, вы должны сначала назначить шрифт с фиксированной шириной (моношириной). Это гарантирует, что все символы имеют одинаковую ширину:
QFont font;
font.setFamily("Courier");
font.setStyleHint(QFont::Monospace);
font.setFixedPitch(true);
font.setPointSize(10);
QTextEdit* editor = new QTextEdit();
editor->setFont(font);
Если вы хотите установить ширину закладки в определенное количество пробелов, как это обычно делается в текстовых редакторах, используйте QFontMetrics
для вычисления размера одного пространства в пикселях:
const int tabStop = 4; // 4 characters
QFontMetrics metrics(font);
editor->setTabStopWidth(tabStop * metrics.width(' '));
Ответ 2
Свойство QTextEdit::tabStopWidth
может решить вашу проблему (см. здесь для документации...)
Ответ 3
В то время как решение @Ferdinand Beyer будет работать на некоторых системах, обычно шрифты не гарантируются целыми метриками. например, 12pt DejaVu Sans Mono
на моей установке Linux имеет ширину символов 9.625. Лучшее решение, которое я нашел, это добавить несколько интервалов между буквами, чтобы получить выравнивание по пикселям.
int tabstop = 4;
QFontMetricsF fm (ui->textEdit->font());
auto stopWidth = tabstop * fm.width(' ');
auto letterSpacing = (ceil(stopWidth) - stopWidth) / tabstop;
auto font = ui->textEdit->font();
font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing);
ui->textEdit->setFont(font);
ui->textEdit->setTabStopWidth(ceil(stopWidth));
Ответ 4
Вычисление произведения размером в один пробел и числовое пространство не всегда точное (проверено под шрифтом macOS, Monaco), предположительно из-за некоторых пробелов между символами в реальной строке. Лучшим решением будет измерение длины строки, содержащей пробелы tabStop:
const int tabStop = 4; // 4 characters
QString spaces;
for (int i = 0; i < tabStop; ++i) {
spaces += " ";
}
QFontMetrics metrics(font);
editor->setTabStopWidth(metrics.width(spaces));