-1

我正在制作一个文本编辑器,一个目标是创建一个上下文菜单,当用户用鼠标选择/突出显示文本时会出现该菜单,这将带来一些进一步的选项。重要的是,我可以将用户选择的文本读入其他 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 的位置但显然无法选择任何事物。

如果这种方法不起作用,我不确定如何进行,所以任何建议都将不胜感激。

谢谢。

4

1 回答 1

0

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

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

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

于 2020-07-26T20:39:05.780 回答