gpt4 book ai didi

c++ - 如何禁用 QTreeView 中的默认复制行为?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:50 27 4
gpt4 key购买 nike

我有一个带有 QStandardItemModelQTreeView,我希望能够阻止用户复制项目的文本。

#include <QMainWindow>
#include <QStandardItemModel>
#include <QTreeView>

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr) :
QMainWindow(parent)
{
auto *treeView = new QTreeView(this);
auto *model = new QStandardItemModel(this);

for (int n = 0; n < 5; n++)
model->appendRow(createItem(QString::number(n)));

treeView->setModel(model);
treeView->setContextMenuPolicy(Qt::NoContextMenu);

setCentralWidget(treeView);
}

private:
QStandardItem *createItem(const QString &name)
{
auto *item = new QStandardItem(name);

item->setFlags(Qt::ItemIsEnabled);

return item;
}
};

我已经将项目设置为不可编辑并禁用了上下文菜单。但是,用户仍然可以单击某个项目并通过按 Ctrl+C 复制文本。我可以使用 Qt::NoItemFlags,但我希望启用这些项目。

如何实现?

最佳答案

要禁用 QTreeView 的默认复制行为,请在子类中重新实现 QTreeView::keyPressEvent,例如TreeView,像这样:

void TreeView::keyPressEvent(QKeyEvent *event)
{
if (!(event == QKeySequence::Copy))
QTreeView::keyPressEvent(event);
}

然后在您的代码中代替 QTreeView:

auto *treeView = new QTreeView(this);

实例化TreeView:

auto *treeView = new TreeView(this);

关于c++ - 如何禁用 QTreeView 中的默认复制行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52403771/

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