参考:
C++ GUI Programming with Qt 4, Second Edition
本地环境:
win10专业版,64位,Qt5.12
效果
在某个item上右键,点击copy后,item的内容已复制到剪贴板。
实现
#include <QMenu>
#include <QClipboard>
QListWidget* myListWidget = new QListWidget;
// 填充数据
for(int i = 0; i < 5; i++) {
myListWidget->addItem(new QListWidgetItem(QString::number(i)));
}
// 默认是strongfocus,聚焦状态下该元素看起来是空白的
myListWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus);
// 设置右键菜单
myListWidget->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(myListWidget, &QListWidget::customContextMenuRequested, [&]() {
QMenu menu;
// 复制动作
QAction* copyAction = menu.addAction("Copy");
// 处理
QObject::connect(copyAction, &QAction::triggered, [&]() {
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(myListWidget->currentItem()->text());
});
// 可以添加其他菜单
menu.exec(QCursor::pos());
});
// 设置分隔线
myListWidget->setStyleSheet("QListWidget::item { border-bottom: 1px solid black; }");
myListWidget->setWordWrap(true);
myListWidget->show();