有时候需要右键菜单完成一些小功能,不方便直接用按钮;
使用右键菜单,方法很多 有一篇博客很全 Qt实现右键菜单的五种方法!(以QListWidget为例)
但是常用的就是重写virtual void contextMenuEvent(QContextMenuEvent *event);右键菜单函数.
以保存halcon图片为例子;
一 头文件
#include <QContextMenuEvent>
二 重写事件声明
protected :
virtual void contextMenuEvent(QContextMenuEvent *event);
private slots:
void saveimage();
三 具体实现
void CameraDtecte1::contextMenuEvent(QContextMenuEvent *event) {
//创建一个菜单 添加事件
QMenu *menu = new QMenu();
QAction *minimized = new QAction(u8"保存图片",this);
menu->addAction(minimized);
connect(minimized, SIGNAL(triggered(bool)), this, SLOT(saveimage()));
//让菜单移动到鼠标位置并显示.
menu->exec(QCursor::pos());
}
void CameraDtecte1::saveimage()
{
HObject image;
HTuple win;
try {
if (CurrentCCD.right(1).toInt() <= 6)
{
win = hv_WindowID[CurrentCCD.right(1).toInt()];
DumpWindowImage(&image,win);
QString filename = QFileDialog::getSaveFileName(this, QString::fromLocal8Bit("保存文件位置"), "", tr("image file(*.bmp)"));
if (!filename.isNull()) {
QTextCodec *pcode = QTextCodec::codecForName("gb18030");
string na = pcode->fromUnicode(filename).data();
WriteImage(image, "bmp", 0, na.c_str());
}
}
}
catch (exception) {
}
}