欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt實(shí)現(xiàn)右擊菜單項(xiàng)

 更新時(shí)間:2022年08月09日 10:12:16   作者:巨蟹賊香  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)右擊菜單項(xiàng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Qt實(shí)現(xiàn)右擊菜單項(xiàng)的具體代碼,供大家參考,具體內(nèi)容如下

有兩種方法:

  • 自定義槽函數(shù)接受信號(hào)
  • 使用鼠標(biāo)事件監(jiān)聽(tīng)

一、前言

這里我用的是QTextEdit來(lái)實(shí)現(xiàn)右鍵功能,假設(shè)我們的預(yù)期功能是:復(fù)制、粘貼、保存、關(guān)閉四個(gè)功能。

但是,我們?cè)谥苯舆\(yùn)行Qt后,發(fā)現(xiàn)右鍵已經(jīng)有默認(rèn)功能了,如圖:

如果有ui項(xiàng)目的話,進(jìn)入ui的QTextEdit組件,找到contextMenuPolicy發(fā)現(xiàn)已經(jīng)設(shè)置為DefaultContextMenu。到此應(yīng)該知道,Qt默認(rèn)為我們創(chuàng)好了默認(rèn)菜單。

查看Qt文檔可以證明我們的猜測(cè)是正確的。

Qt文檔中解釋了,默認(rèn)屬性是Qt::DefaultContextMenu,并且還有Qt::NoContextMenuQt::PreventContextMenu、Qt::ActionsContextMenu、Qt::CustomContextMenu。并且使用Qt::CustomContextMenu時(shí),會(huì)發(fā)射一個(gè)customContextMenuRequested()信號(hào)。

這么一來(lái),就很清晰了。

二、自定義槽函數(shù)接受信號(hào)

從上文可知,我們要想使用自定義方法。需要將屬性值改了,如果我們?cè)赒TextEdit中修改屬性,則

edit->setContextMenuPolicy(Qt::CustomContextMenu);

這樣一來(lái),右鍵就不會(huì)出現(xiàn)默認(rèn)選項(xiàng)了。

并對(duì)QTextEdit連接了自定義槽函數(shù),名稱自定

connect(edit,&QTextEdit::customContextMenuRequested,this,&Widget::ShowMenu);

這樣準(zhǔn)備工作就完成了。

槽函數(shù)中我們需要?jiǎng)?chuàng)建一個(gè)菜單,并且添加選擇,這里使用QAction。

再將QAction的成員連接個(gè)自功能,這樣就實(shí)現(xiàn)了基礎(chǔ)的菜單功能。

顯示的位置在光標(biāo)位置處,所以使用QCursor::pos()即可。

具體功能在槽函數(shù)里添加就行了。

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());
}

三、使用鼠標(biāo)監(jiān)聽(tīng)

重寫(xiě)

void mousePressEvent(QMouseEvent *event) override;

函數(shù)

需要判斷鼠標(biāo)點(diǎn)擊事件是否是右擊,如果不,則直接返回,如果是,執(zhí)行和方法一一樣的思路。

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());
}

四、兩分法對(duì)比

方法一針對(duì)的是某個(gè)組件實(shí)現(xiàn)的菜單功能。比如我對(duì)界面中的edit1組件使用了edit->setContextMenuPolicy(Qt::CustomContextMenu);,那么edit1就可以實(shí)現(xiàn)自定義功能。而edit2edit3則沒(méi)有。

方法二是監(jiān)聽(tīng)鼠標(biāo)事件,只要是右擊就出現(xiàn)菜單,對(duì)程序整個(gè)窗口內(nèi)都有效,包括空白區(qū)域。

兩個(gè)方法實(shí)現(xiàn)的思路都是大同小異,在使用時(shí)看情況而分配吧。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言之sizeof與strlen的使用及區(qū)別

    C語(yǔ)言之sizeof與strlen的使用及區(qū)別

    這篇文章主要介紹了C語(yǔ)言之sizeof與strlen的使用及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二)

    C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)json形式的Socket傳輸圖片

    C++實(shí)現(xiàn)json形式的Socket傳輸圖片

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)json形式的Socket傳輸圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語(yǔ)言之初識(shí)指針

    C語(yǔ)言之初識(shí)指針

    在C語(yǔ)言中,指針是一種保存變量地址的變量。這篇文章介紹了初識(shí)C語(yǔ)言指針,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C++求所有頂點(diǎn)之間的最短路徑(用Floyd算法)

    C++求所有頂點(diǎn)之間的最短路徑(用Floyd算法)

    這篇文章主要為大家詳細(xì)介紹了C++求所有頂點(diǎn)之間的最短路徑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語(yǔ)言中循環(huán)語(yǔ)句練習(xí)實(shí)例

    C語(yǔ)言中循環(huán)語(yǔ)句練習(xí)實(shí)例

    大家好,本篇文章主要講的是C語(yǔ)言中循環(huán)語(yǔ)句練習(xí)實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語(yǔ)言輸出唯一的子串

    C語(yǔ)言輸出唯一的子串

    這篇文章主要介紹了C語(yǔ)言輸出唯一的子串,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12
  • C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比

    C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比,文中最后對(duì)兩種模式的優(yōu)缺點(diǎn)總結(jié)也比較詳細(xì),需要的朋友可以參考下
    2016-03-03
  • c++中引用作為形參的使用方法以及作用

    c++中引用作為形參的使用方法以及作用

    這篇文章主要給大家介紹了關(guān)于c++中引用作為形參的使用方法以及作用的相關(guān)資料,引用是地址傳值,作為引用的形參數(shù)值被修改的同時(shí),也修改了對(duì)應(yīng)實(shí)參的值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • C++之list容器介紹及使用方式

    C++之list容器介紹及使用方式

    這篇文章主要介紹了C++之list容器介紹及使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論