gpt4 book ai didi

qt - Qt Quick.2 TextField 的操作系统编辑/粘贴菜单

转载 作者:行者123 更新时间:2023-12-04 12:55:24 25 4
gpt4 key购买 nike

如何通过右键单击所选文本获取 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 上的 mingw{32,64}。

最佳答案

就我在 Qt 错误跟踪器中看到的而言,即使在 Qt 5.10 中,它也是一个缺失的功能( QTBUG-35598 )。

我认为恕我直言的原因是确保应用程序具有一致的外观和感觉,而不管平台如何。

所以恐怕您必须实现自己的上下文菜单。这是我想出的一个片段:

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 的操作系统编辑/粘贴菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com