この写真を見てください:
愚かなコンテンツとその中央にあるコンテキスト メニューを含む 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()
。残念ながら、そのような信号は見つかりませんでした。マウスがオフになっていることをプログラムに知らせる方法はありますか?
私の問題を完全に説明したことを願っています。