当用户在QMainWindow中选择文本时,创建上下文菜单



我正在制作一个文本编辑器,其中一个目标是创建一个上下文菜单,当用户用鼠标选择/高亮显示文本时,该菜单将显示一些进一步的选项。重要的是,我可以将用户选择的文本读取到其他一些QString对象中。

到目前为止,我已经尝试通过覆盖mousePressEvent和mouseReleaseEvent来重复执行此操作,以便在文档中适当地定位QTextCursor并选择文本。

代码如下:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
qDebug() << "left button clicked";
if (event->button() == Qt::RightButton)
qDebug() << "right button clicked";
txtcur = ui->textEdit->cursorForPosition(event->pos());
txtcur.setPosition(txtcur.selectionStart(), QTextCursor::MoveAnchor);
qDebug() << txtcur.anchor();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
txtcur = ui->textEdit->cursorForPosition(event->pos());
txtcur.setPosition(txtcur.selectionEnd(), QTextCursor::KeepAnchor);
txtcur.select(QTextCursor::WordUnderCursor);
if (txtcur.hasSelection())
{
qDebug() << "text selected";
qDebug() << "text selected";
// create context menu
}
}

经过一些测试,我发现我在QTextEdit小部件中的左键点击被其他一些功能忽略或消耗,这阻止了我选择文本,而右键点击似乎很好,我可以移动QTextCursor的位置,但显然无法选择任何内容。

如果这种方法不起作用,我不知道该怎么办,所以任何建议都将不胜感激。

谢谢。

如果这对任何人都有用,我稍后使用textEdit窗口selectionChanged((发出的信号解决了这个问题,代码非常简单:

void MainWindow::on_textEdit_selectionChanged()
{
QTextCursor txtcur(ui->textEdit->textCursor());
txtcur.selectionStart();
txtcur.selectionEnd();
txtSelected = txtcur.selectedText();
qDebug() << txtSelected;
}

我仍然不明白是什么消耗了textEdit上的左键点击事件,但至少它现在起作用了。

相关内容

  • 没有找到相关文章

最新更新