我有以下代码(在mouseReleaseEvent中实现)来检测用户何时选择了文本行:
QTextCursor cursor = this->textCursor();
int start = cursor.selectionStart();
int end = cursor.selectionEnd();
if(!cursor.hasSelection())
return; // No selection available
qWarning() << "start: " << start << " end: " << end << endl;
问题是:我需要选择开始和结束的行号。我一直在努力解决问题并没有解决任何问题,你能不能给我一个线索?
答案 0 :(得分:5)
有可能,它不是最好的解决方案,但似乎对我有用。变量selectedLines
将包含选择的行数。
QTextCursor cursor = ui->plainTextEdit->textCursor();
int selectedLines = 0; //<--- this is it
if(!cursor.selection().isEmpty())
{
QString str = cursor.selection().toPlainText();
selectedLines = str.count("\n")+1;
}
我希望,它会有所帮助:)
答案 1 :(得分:1)
我看到使用2个QTextCursor方法链的简单方法 - setPosition和blockNumber。
QTextCursor cursor = this->textCursor();
int start = cursor.selectionStart();
int end = cursor.selectionEnd();
if(!cursor.hasSelection())
return; // No selection available
cursor.setPosition(start);
int firstLine = cursor.blockNumber();
cursor.setPosition(end, QTextCursor::KeepAnchor);
int lastLine = cursor.blockNumber();
qWarning() << "start: " << firstLine << " end: " << lastLine << endl;
UPD:
cursor.setPosition(start);
cursor.block().layout()->lineForTextPosition(start).lineNumber();
// or
cursor.block().layout()->lineAt(<relative pos from start of block>).lineNumber();
设置开始选择的位置。获取当前块,获取块的布局并使用Qt API获取行号。我不知道返回的行号对于整个文档或布局是绝对的。如果仅用于布局,则需要一些额外的过程来计算先前块的行号。
for (QTextBlock block = cursor.block(). previous(); block.isValid(); block = block.previous())
lines += block.lineCount();