(四)Qt之右鍵選單

2022-04-07 11:26:59 字數 1712 閱讀 5682

作為一種互動性強、使用方便的右鍵選單在程式中是非常常用的,在qt中可以輕鬆的實現。

qmenu menu;
//新增選單項,指定圖示、名稱、響應函式
menu.addaction(qicon("1.png"), qstringliteral("新增"),this,slot(onbscgrouprightaction()));
//在滑鼠位置顯示
menu.exec(qcursor::pos());
qwidget及其子類都可有右鍵選單,首先設定qwidget與右鍵選單有關的函式setcontextmenupolicy(),屬性對應項為contextmenupolicy。

setcontextmenupolicy函式的引數為列舉型別qt::contextmenupolicy,qt幫助文件中有相應介紹:

預設是qt::defaultcontextmenu,它是利用右鍵選單事件contextmenuevent()來處理(which means the contextmenuevent() handler is called)。就是要重寫contextmenuevent( qcontextmenuevent * event )函式。

你可以通過ui屬性來設定:

void mainwindow::contextmenuevent(qcontextmenuevent *event)
b、qt::customcontextmenu

它是發出qwidget::customcontextmenurequested訊號,注意僅僅只是發訊號,意味著要自己寫顯示右鍵選單的slot。這個訊號是qwidget唯一與右鍵選單有關的訊號(也是自有的唯一訊號),同時也是很容易被忽略的signal:

void customcontextmenurequested ( const qpoint & pos )

一般來說為了方便,我們會省略自己新增connect來關聯槽函式,而是採用預設的槽函式,預設槽函式命名規則:void on_控制項id_customcontextmenurequested(const qpoint &pos);

void bscserver::on_treeview_customcontextmenurequested(const qpoint &pos)
c、qt::actionscontextmenu

該型別比較簡單,直接使用qwidget::actions()函式新增動作即可,點選右鍵就會自動彈出選單。

如對於qtableview控制項,設定如下:

//新增右鍵菜
ui.tableview->addaction(ui.action_add);
ui.tableview->addaction(ui.action_del);
//右鍵處理事件
connect(ui.action_add, signal(triggered()), this, slot(addrecord()));
connect(ui.action_del, signal(triggered()), this, slot(delrecord()));

qt之右鍵選單 QMenu

以widget為例 widget的子類都可以如widget一樣設定右鍵選單 步驟一 根據文件的解釋,在將widget 設定為 qt customcontextmenu後,會觸發customcontextmenuresquested 函式,這個函式是乙個signal 步驟二 定義乙個槽函式void s...

DataGrid 之右鍵選單

flex的右鍵選單是通過contextmenu來實現的。談到向datagrid新增右鍵選單,肯定有人會想到直接設定datagrid的例項 id為dg,後面均用dg代替 的contextmenu屬性就行了,還有人會想到通過設定itemrenderer來實現右鍵選單功能。下面以個人觀點分析下著兩種方法。...

QT 右鍵彈出選單

qwidget及其子類都可有右鍵選單 1.設定標誌 在widget初始化的時候 setcontextmenupolicy qt customcontextmenu 設定為自定義選單模式 2.在需要的地方進行訊號關聯 connect mbrowserview,civdatasourcetreeview...