请看这张照片:
您可以看到一个 QTableView,其中包含一些愚蠢的内容和一个位于其中心的上下文菜单。我的问题是,如果我在上下文菜单打开时单击表格(无论按下哪个按钮)视图(并且我希望上下文菜单会在 Windows 程序中发生时消失,然后如果右键按钮又出现在新位置被按下)我的程序立即崩溃。我这样创建它:
connect(tableView, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(showContextMenu(const QPoint&)));
void MainWindow :: showContextMenu(const QPoint &_point)
{
QPoint pos = tableView->mapToGlobal(_point);
QModelIndex index = tableView->currentIndex();
int row = index.row();
QMenu menu;
menu.addAction("Test 1");
menu.addAction("Test 2");
QAction *action = menu.exec(pos);
QString text = action->text();
if (text == "Test 1")
qDebug("Test 1");
else
if (text == "Test 2")
qDebug("Test 2");
else
qDebug("Vzdroch");
}
我不知道它为什么会崩溃。QtCreator 中没有调试器之类的东西,即它是,但安装它就像向太空发射火箭一样复杂。我需要的只是像往常一样处理超出上下文菜单区域的鼠标点击。
我知道您可能很难找出它崩溃的原因,所以我会稍微缓和一下我的问题。当鼠标超出其区域时,有没有办法使该上下文菜单消失?hovered()
在 Qt 中有一个名为的信号。它在用户鼠标悬停在小部件上时发出,所以我正在搜索一个信号,我们称之为它unhovered()
,当用户将鼠标从小部件上移开时发出。不幸的是,我没能找到这样的信号。有没有办法让我的程序知道鼠标已关闭?
希望我已经完全描述了我的问题。