Qt Quick.2 TextField 的操作系统编辑/粘贴菜单
Posted
技术标签:
【中文标题】Qt Quick.2 TextField 的操作系统编辑/粘贴菜单【英文标题】:OS Edit/Paste menu for Qt Quick.2 TextField 【发布时间】:2018-04-12 09:44:57 【问题描述】:如何在选定文本上单击鼠标右键获取 QtQuick.Controls 2* TextField 的操作系统特定粘贴菜单。
有效:
import QtQuick.Controls 1.4
TextField
placeholderText: qsTr("Filter")
selectByMouse: true
然后给我菜单,同时
import QtQuick.Controls 2.2
TextField
placeholderText: qsTr("Filter")
selectByMouse: true
这在右键单击时没有任何作用。
我使用的是 5.9 LTS 版本,但我坚持了一段时间。
它既不适用于手动安装 5.9 的 Ubuntu Linux 16.04,也不适用于 Windows 10,msys2 上的 mingw32,64。
【问题讨论】:
【参考方案1】:据我在 Qt 错误跟踪器中看到的,它是一个缺失的功能 (QTBUG-35598),即使在 Qt 5.10 中也是如此。
我认为恕我直言的原因是为了确保应用程序具有一致的外观和感觉,与平台无关。
所以恐怕您必须实现自己的上下文菜单。这是我想出的一个 sn-p:
property int selectStart
property int selectEnd
property int curPos
TextField
id: textInput
placeholderText: qsTr("Filter")
selectByMouse: true
MouseArea
anchors.fill: parent
acceptedButtons: Qt.RightButton
hoverEnabled: true
onClicked:
selectStart = textInput.selectionStart;
selectEnd = textInput.selectionEnd;
curPos = textInput.cursorPosition;
contextMenu.x = mouse.x;
contextMenu.y = mouse.y;
contextMenu.open();
textInput.cursorPosition = curPos;
textInput.select(selectStart,selectEnd);
onPressAndHold:
if (mouse.source === Qt.MouseEventNotSynthesized)
selectStart = textInput.selectionStart;
selectEnd = textInput.selectionEnd;
curPos = textInput.cursorPosition;
contextMenu.x = mouse.x;
contextMenu.y = mouse.y;
contextMenu.open();
textInput.cursorPosition = curPos;
textInput.select(selectStart,selectEnd);
Menu
id: contextMenu
MenuItem
text: "Cut"
onTriggered:
textInput.cut()
MenuItem
text: "Copy"
onTriggered:
textInput.copy()
MenuItem
text: "Paste"
onTriggered:
textInput.paste()
保存和恢复选择的代码来自 KDE Plasma(请看here),因为默认情况下,TextField 会在右键单击后重置选择。
【讨论】:
感谢您提供相关的 Qt 错误,我想到了类似的东西,但从未找到权威来源。以上是关于Qt Quick.2 TextField 的操作系统编辑/粘贴菜单的主要内容,如果未能解决你的问题,请参考以下文章