android 上 QTextEdit 的选择
Posted
技术标签:
【中文标题】android 上 QTextEdit 的选择【英文标题】:Selection at QTextEdit at android 【发布时间】:2018-07-09 00:54:46 【问题描述】:我正在使用 QTextEdit 组件的文本编辑功能在 Qt5.11 上制作应用程序。 它在桌面上运行良好:用户可以选择和编辑文本,我可以通过自己的操作更改上下文菜单 - 一切都很棒。
但在 android 平台上它有点坏了。用户可以通过触摸设置光标位置,但不能选择整个单词或文本范围。如果我以编程方式设置选择,那么 android 键盘将隐藏。之后,如果我单击选择,则会出现范围更改器以及带有禁用“复制”、“剪切”和“粘贴”按钮的奇怪顶部面板。 此外,如果我按住手指几秒钟,屏幕上就会出现一个“粘贴”按钮。我没有看到任何隐藏它、阻止它出现或添加自定义按钮的方法。
我尝试过 QWidgets 项目、QML Quick 项目甚至“Qt Quick Control 2 - Text Editor”示例。总是有相同的行为。
看起来 QTextEdit 具有所有必要的功能,但由于某种原因它无法正常工作并且无法控制。
我想出的最佳解决方案是制作透明的 MouseArea 并手动处理所有触摸。但这正常吗?!
【问题讨论】:
看来我需要继承QTextEdit并重新实现mousePressEvent和mouseReleaseEvent。逻辑非常棘手,很多代码位于 QTextEditPrivate、QTextControlPrivate 等内部。所以,定制会非常困难,但我会尝试。 【参考方案1】:在 Qt 5.8 到 5.11 中,自动文本选择句柄对我来说似乎有点问题。也许最好简单地禁用它们,然后手动添加您自己的剪切/复制/粘贴按钮。至少现在,直到 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();
【讨论】:
以上是关于android 上 QTextEdit 的选择的主要内容,如果未能解决你的问题,请参考以下文章