How do I get the OS specific paste menu for a QtQuick.Controls 2* TextField on a right click on selected text.
That works:
import QtQuick.Controls 1.4
TextField
{
placeholderText: qsTr("Filter")
selectByMouse: true
}
and gives me the menu, while
import QtQuick.Controls 2.2
TextField
{
placeholderText: qsTr("Filter")
selectByMouse: true
}
this does nothing on right-click.
I'm using version 5.9 LTS and I'm stuck with it for a while.
It works neither on Ubuntu Linux 16.04 with 5.9 manually installed nor on Windows 10, mingw{32,64} on msys2.
As far as I can see in the Qt bug tracker, it is a missing feature (QTBUG-35598), even in Qt 5.10.
I think the reason for that IMHO, is to ensure the application has a consistent look and feel irregardless from the platform.
So I'm afraid you have to implement your own context menu. Here is a snippet I came up with:
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()
}
}
}
}
}
The code to save and restore the selection comes from KDE plasma (have look here) because by default TextField will reset the selection after right click.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With