在 android 的 QTextEdit 中选择

Selection at QTextEdit at android

我正在 Qt5.11 上制作具有 QTextEdit 组件文本编辑功能的应用程序。 它在桌面上运行良好:用户可以 select 和编辑文本,我可以通过自己的操作更改上下文菜单——一切都很棒。

但是在 android 平台上它有点坏了。用户可以通过触摸设置光标位置,但不能 select 整个单词或文本范围。如果我以编程方式设置 selection,那么 android 键盘会隐藏。之后,如果我单击 selection,则会出现量程转换器以及带有禁用 "copy"、"cut" 和 "paste" 按钮的奇怪顶部面板。 此外,如果我按住手指几秒钟而不是单个 "paste" 按钮出现在屏幕上。我看不到任何隐藏它、防止它出现或添加自定义按钮的方法。

我尝试过 QWidgets 项目、QML Quick 项目甚至 "Qt Quick Control 2 - Text Editor" 示例。总是有相同的行为。

看起来 QTextEdit 具有所有必要的功能,但由于某些原因它不能正常工作并且没有控制。

我想到的最佳解决方案是使 MouseArea 透明并手动处理所有触摸。但这是正常的吗?!

在 Qt 5.8 到 5.11 中,自动文本选择句柄对我来说似乎有点问题。也许最好简单地禁用它们,然后手动为 cut/copy/paste 添加您自己的按钮。至少,目前,直到 Qt 在未来的版本中正确使用它们。

通过深入挖掘 Qt 平台抽象代码,我发现了一个未记录的环境变量,您可以将其设置为禁止显示文本选择句柄。方法如下:

int main(int argc, char *argv[])
{
#ifdef Q_OS_ANDROID
    qputenv("QT_QPA_NO_TEXT_HANDLES", "1");
#endif
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}