最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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::NoContextMenu、Qt::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)

重寫

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)自定義功能。而edit2、edit3則沒(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)文章

  • 基于OpenCV實(shí)現(xiàn)車道線檢測(cè)(自動(dòng)駕駛 機(jī)器視覺(jué))

    基于OpenCV實(shí)現(xiàn)車道線檢測(cè)(自動(dòng)駕駛 機(jī)器視覺(jué))

    無(wú)人駕駛技術(shù)是機(jī)器學(xué)習(xí)為主的一門前沿領(lǐng)域,在無(wú)人駕駛領(lǐng)域中機(jī)器學(xué)習(xí)的各種算法隨處可見(jiàn),本文將為大家介紹無(wú)人駕駛技術(shù)中的車道線檢測(cè),感興趣的小伙伴可以了解一下
    2021-11-11
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    這篇文章主要介紹了C++排序算法之插入排序解析,將數(shù)組分為有序表和無(wú)序表,每次從有序表中取出一個(gè)元素,插入到有序表的適當(dāng)位置,每遍歷一次,有序表中元素增加一個(gè),無(wú)序表中元素個(gè)數(shù)減少一個(gè),重復(fù)n-1次,完成排序,需要的朋友可以參考下
    2023-10-10
  • 深入解析C++ Data Member內(nèi)存布局

    深入解析C++ Data Member內(nèi)存布局

    本篇文章是對(duì)C++中的Data Member內(nèi)存布局進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟

    C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于C/C++代碼操作MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,通過(guò)文中的這些示例,我們可以連接到MySQL數(shù)據(jù)庫(kù),并執(zhí)行常見(jiàn)的數(shù)據(jù)庫(kù)操作,如創(chuàng)建表、插入數(shù)據(jù)和查詢數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn),對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的研究很有幫助,需要的朋友可以參考下
    2014-07-07
  • 基于WTL 雙緩沖(double buffer)繪圖的分析詳解

    基于WTL 雙緩沖(double buffer)繪圖的分析詳解

    本篇文章是對(duì)WTL下使用雙緩沖(double buffer)繪圖進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 利用C++如何實(shí)現(xiàn)一個(gè)阻塞隊(duì)列詳解

    利用C++如何實(shí)現(xiàn)一個(gè)阻塞隊(duì)列詳解

    這篇文章主要給大家介紹了關(guān)于利用C++如何實(shí)現(xiàn)一個(gè)阻塞隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C++中protobuf?的交叉編譯使用詳解

    C++中protobuf?的交叉編譯使用詳解

    為了提高通信效率,可以采用?protobuf?替代?XML?和?Json?數(shù)據(jù)交互格式,protobuf?相對(duì)來(lái)說(shuō)數(shù)據(jù)量小,在進(jìn)程間通信或者設(shè)備之間通信能夠提高通信速率。下面介紹?protobuf?在?ARM?平臺(tái)上的使用,需要的朋友可以參考下
    2022-07-07
  • C++ 網(wǎng)絡(luò)編程 總結(jié)

    C++ 網(wǎng)絡(luò)編程 總結(jié)

    這篇文章主要介紹了C++ 網(wǎng)絡(luò)編程的一些詳細(xì)相關(guān)內(nèi)容,有需要的小伙伴可以參考下。
    2015-06-06
  • C語(yǔ)言平衡二叉樹(shù)詳解

    C語(yǔ)言平衡二叉樹(shù)詳解

    這篇文章主要介紹了C語(yǔ)言平衡二叉樹(shù)的相關(guān)資料,需要的朋友可以參考下,小編覺(jué)得這篇文章寫的還不錯(cuò),希望能夠給你帶來(lái)幫助
    2021-11-11

最新評(píng)論

宁明县| 杂多县| 滨州市| 镇沅| 青河县| 涞源县| 兴隆县| 石林| 治县。| 忻城县| 双辽市| 新乡市| 志丹县| 凤阳县| 阜宁县| 江口县| 长武县| 于田县| 平湖市| 蕲春县| 湘西| 茌平县| 铜山县| 乐安县| 平乐县| 云和县| 扶沟县| 内乡县| 固镇县| 邯郸县| 临漳县| 资阳市| 右玉县| 建湖县| 邹城市| 枣庄市| 曲阳县| 株洲县| 玉龙| 滨州市| 恭城|