<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Qt實現右擊選單項的具體程式碼,供大家參考,具體內容如下
有兩種方法:
這裡我用的是QTextEdit
來實現右鍵功能,假設我們的預期功能是:複製、貼上、儲存、關閉四個功能。
但是,我們在直接執行Qt後,發現右鍵已經有預設功能了,如圖:
如果有ui專案的話,進入ui的QTextEdit
元件,找到contextMenuPolicy
發現已經設定為DefaultContextMenu
。到此應該知道,Qt預設為我們創好了預設選單。
檢視Qt檔案可以證明我們的猜測是正確的。
Qt檔案中解釋了,預設屬性是Qt::DefaultContextMenu
,並且還有Qt::NoContextMenu
、Qt::PreventContextMenu
、Qt::ActionsContextMenu
、Qt::CustomContextMenu
。並且使用Qt::CustomContextMenu
時,會發射一個customContextMenuRequested()
訊號。
這麼一來,就很清晰了。
從上文可知,我們要想使用自定義方法。需要將屬性值改了,如果我們在QTextEdit中修改屬性,則
edit->setContextMenuPolicy(Qt::CustomContextMenu);
這樣一來,右鍵就不會出現預設選項了。
並對QTextEdit
連線了自定義槽函數,名稱自定
connect(edit,&QTextEdit::customContextMenuRequested,this,&Widget::ShowMenu);
這樣準備工作就完成了。
槽函數中我們需要建立一個選單,並且新增選擇,這裡使用QAction
。
再將QAction的成員連線個自功能,這樣就實現了基礎的選單功能。
顯示的位置在遊標位置處,所以使用QCursor::pos()
即可。
具體功能在槽函數裡新增就行了。
void Widget::ShowMenu() { QMenu *menu = new QMenu(this); QStringList list; list << "copy" << "paste" << "save" << "close"; QList<QAction *> actList; for(int i = 0; i < list.count(); i ++) actList.append(new QAction(list.at(i))); connect(actList.at(0),&QAction::triggered,this,&Widget::CopyAction); connect(actList.at(1),&QAction::triggered,this,&Widget::PasteAction); connect(actList.at(2),&QAction::triggered,this,&Widget::SaveAction); connect(actList.at(3),&QAction::triggered,this,&Widget::CloseAction); menu->addActions(actList); menu->exec(QCursor::pos()); }
重寫
void mousePressEvent(QMouseEvent *event) override;
函數
需要判斷滑鼠點選事件是否是右擊,如果不,則直接返回,如果是,執行和方法一一樣的思路。
void Widget::mousePressEvent(QMouseEvent *event) { if(event->button() != Qt::RightButton) return; QMenu *menu = new QMenu(this); QStringList list; list << "copy" << "paste" << "save" << "close"; QList<QAction *> actList; for(int i = 0; i < list.count(); i ++) actList.append(new QAction(list.at(i))); connect(actList.at(0),&QAction::triggered,this,&Widget::CopyAction); connect(actList.at(1),&QAction::triggered,this,&Widget::PasteAction); connect(actList.at(2),&QAction::triggered,this,&Widget::SaveAction); connect(actList.at(3),&QAction::triggered,this,&Widget::CloseAction); menu->addActions(actList); menu->exec(QCursor::pos()); }
方法一針對的是某個元件實現的選單功能。比如我對介面中的edit1
元件使用了edit->setContextMenuPolicy(Qt::CustomContextMenu);
,那麼edit1
就可以實現自定義功能。而edit2
、edit3
則沒有。
方法二是監聽滑鼠事件,只要是右擊就出現選單,對程式整個視窗內都有效,包括空白區域。
兩個方法實現的思路都是大同小異,在使用時看情況而分配吧。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45