国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT基礎(chǔ)篇(11)QT5事件處理及實(shí)例

這篇具有很好參考價值的文章主要介紹了QT基礎(chǔ)篇(11)QT5事件處理及實(shí)例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.鼠標(biāo)事件及實(shí)例

QT5中有多種鼠標(biāo)事件可以使用,常用的鼠標(biāo)事件有:

  1. mousePressEvent:當(dāng)鼠標(biāo)按下時觸發(fā)的事件。
  2. mouseReleaseEvent:當(dāng)鼠標(biāo)釋放時觸發(fā)的事件。
  3. mouseDoubleClickEvent:當(dāng)鼠標(biāo)雙擊時觸發(fā)的事件。
  4. mouseMoveEvent:當(dāng)鼠標(biāo)移動時觸發(fā)的事件。
  5. wheelEvent:當(dāng)鼠標(biāo)滾輪滾動時觸發(fā)的事件。

下面是一個簡單的例子,演示了如何使用鼠標(biāo)事件:

#include <QtWidgets>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}

protected:
    void mousePressEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton)
        {
            qDebug() << "Left button pressed";
        }
        else if (event->button() == Qt::RightButton)
        {
            qDebug() << "Right button pressed";
        }

        // 必須調(diào)用基類的函數(shù),以確保其他事件處理程序可以接收到事件
        QWidget::mousePressEvent(event);
    }

    void mouseReleaseEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton)
        {
            qDebug() << "Left button released";
        }
        else if (event->button() == Qt::RightButton)
        {
            qDebug() << "Right button released";
        }

        QWidget::mouseReleaseEvent(event);
    }

    void mouseDoubleClickEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton)
        {
            qDebug() << "Left button double clicked";
        }
        else if (event->button() == Qt::RightButton)
        {
            qDebug() << "Right button double clicked";
        }

        QWidget::mouseDoubleClickEvent(event);
    }

    void mouseMoveEvent(QMouseEvent *event) override
    {
        qDebug() << "Mouse moved to" << event->pos();

        QWidget::mouseMoveEvent(event);
    }

    void wheelEvent(QWheelEvent *event) override
    {
        if (event->angleDelta().y() > 0)
        {
            qDebug() << "Mouse wheel scrolled up";
        }
        else if (event->angleDelta().y() < 0)
        {
            qDebug() << "Mouse wheel scrolled down";
        }

        QWidget::wheelEvent(event);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

在這個例子中,我們創(chuàng)建了一個自定義的MyWidget類,并重寫了上述的鼠標(biāo)事件處理函數(shù)。在每個函數(shù)中,我們使用qDebug()函數(shù)輸出一些信息,以便在控制臺中查看這些事件。

注意,在每個事件處理函數(shù)中,我們都調(diào)用了基類的對應(yīng)函數(shù),這是為了保證其他事件處理程序可以繼續(xù)接收到事件。

main()函數(shù)中,我們創(chuàng)建了一個MyWidget對象并顯示它,然后通過調(diào)用app.exec()進(jìn)入事件循環(huán),以接收和處理鼠標(biāo)事件。

當(dāng)運(yùn)行這個程序時,你可以在控制臺中看到與鼠標(biāo)相關(guān)的事件信息。你可以嘗試按下、釋放、雙擊鼠標(biāo)按鈕,移動鼠標(biāo)和滾動鼠標(biāo)滾輪,并觀察輸出結(jié)果。

2.鍵盤事件及實(shí)例

在QT5中,可以使用鍵盤事件來響應(yīng)鍵盤的按下和釋放動作。常用的鍵盤事件有:

  1. keyPressEvent:當(dāng)鍵盤按鍵被按下時觸發(fā)的事件。
  2. keyReleaseEvent:當(dāng)鍵盤按鍵被釋放時觸發(fā)的事件。

下面是一個簡單的例子,演示了如何使用鍵盤事件:

#include <QtWidgets>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}

protected:
    void keyPressEvent(QKeyEvent *event) override
    {
        qDebug() << "Key" << event->text() << "pressed";

        QWidget::keyPressEvent(event);
    }

    void keyReleaseEvent(QKeyEvent *event) override
    {
        qDebug() << "Key" << event->text() << "released";

        QWidget::keyReleaseEvent(event);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

在這個例子中,我們創(chuàng)建了一個自定義的MyWidget類,并重寫了keyPressEventkeyReleaseEvent函數(shù)。在每個函數(shù)中,我們使用qDebug()函數(shù)輸出鍵盤事件相關(guān)的信息。

注意,在每個事件處理函數(shù)中,我們都調(diào)用了基類的對應(yīng)函數(shù),這是為了保證其他事件處理程序可以繼續(xù)接收到事件。

main()函數(shù)中,我們創(chuàng)建了一個MyWidget對象并顯示它,然后通過調(diào)用app.exec()進(jìn)入事件循環(huán),以接收和處理鍵盤事件。

當(dāng)運(yùn)行這個程序時,你可以按下和釋放鍵盤上的任何按鍵,并在控制臺中看到與鍵盤事件相關(guān)的輸出信息。

這只是一個簡單的例子,你可以根據(jù)需要處理更復(fù)雜的鍵盤事件,例如處理特定的組合鍵或按鍵序列。

3.事件過濾及實(shí)例

在QT5中,事件過濾器(Event Filter)是一種機(jī)制,允許你在一個對象上監(jiān)聽和處理其他對象的事件,而不是直接在目標(biāo)對象上重寫事件處理函數(shù)。

使用事件過濾器的好處是可以在一個類中集中處理多個對象的事件,簡化代碼結(jié)構(gòu)和管理。

下面是一個使用事件過濾器的示例:

#include <QtWidgets>

class EventFilter : public QObject
{
public:
    EventFilter(QObject *parent = nullptr) : QObject(parent) {}

protected:
    bool eventFilter(QObject *watched, QEvent *event) override
    {
        if (event->type() == QEvent::KeyPress)
        {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            qDebug() << "Key" << keyEvent->text() << "pressed";
        }

        return QObject::eventFilter(watched, event);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QPushButton button("Press me");
    button.show();

    EventFilter filter;
    button.installEventFilter(&filter);

    return app.exec();
}

在這個例子中,我們創(chuàng)建了一個名為EventFilter的自定義類,繼承自QObject。在EventFilter類中,我們重寫了eventFilter函數(shù),該函數(shù)會被框架自動調(diào)用來處理所有事件。

eventFilter函數(shù)中,我們判斷事件的類型是否為按鍵事件(QEvent::KeyPress),如果是,我們將事件轉(zhuǎn)換為QKeyEvent類型,然后輸出按下的鍵。

main()函數(shù)中,我們創(chuàng)建了一個QPushButton對象,并顯示它。然后,我們創(chuàng)建了一個EventFilter對象,并通過調(diào)用installEventFilter()函數(shù)將事件過濾器安裝到按鈕上。

這樣,當(dāng)按鈕上發(fā)生任何事件時,都會觸發(fā)EventFilter類中的eventFilter函數(shù),以便處理事件。

在運(yùn)行這個程序時,點(diǎn)擊按鈕或按下鍵盤上的按鍵,都會在控制臺中看到相關(guān)的輸出信息。

注意,事件過濾器所安裝的對象,可以是任何繼承自QObject的對象,不僅僅是QWidget或其派生類。你可以根據(jù)需要在不同的對象上使用事件過濾器。文章來源地址http://www.zghlxwxcb.cn/news/detail-806379.html

到了這里,關(guān)于QT基礎(chǔ)篇(11)QT5事件處理及實(shí)例的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Qt5開發(fā)及實(shí)例V2.0-第七章-Qt圖形視圖框架

    Qt5開發(fā)及實(shí)例V2.0-第七章-Qt圖形視圖框架

    7.1.1 Graphics View的特點(diǎn) Graphics View框架結(jié)構(gòu)的主要特點(diǎn)如下。 (1)Graphics View框架結(jié)構(gòu)中,系統(tǒng)可以利用Qt繪圖系統(tǒng)的反鋸齒、OpenGL工具來改善繪圖性能。 (2)Graphics View支持事件傳播體系結(jié)構(gòu),可以使圖元在場景(scene)中的交互能力提高1倍,圖元能夠處理鍵盤事件和鼠標(biāo)事

    2024年02月07日
    瀏覽(18)
  • Qt5開發(fā)及實(shí)例V2.0-第四章Qt基本對話框

    Qt5開發(fā)及實(shí)例V2.0-第四章Qt基本對話框

    首先介紹標(biāo)準(zhǔn)文件對話框(QFileDialog)、標(biāo)準(zhǔn)顏色對話框(QColorDialog)、標(biāo)準(zhǔn)字體對話框(QFontDialog)、標(biāo)準(zhǔn)輸入對話框(QInputDialog)及標(biāo)準(zhǔn)消息對話框(QMessageBox),運(yùn)行效果如圖4.1所示。 按如圖4.1所示依次執(zhí)行如下操作。 (1)單擊“文件標(biāo)準(zhǔn)對話框?qū)嵗卑粹o,彈出“文

    2024年02月07日
    瀏覽(95)
  • Qt+MySql開發(fā)筆記:Qt5.9.3的msvc2017x64版本編譯MySql8.0.16版本驅(qū)動并Demo連接數(shù)據(jù)庫測試

    Qt+MySql開發(fā)筆記:Qt5.9.3的msvc2017x64版本編譯MySql8.0.16版本驅(qū)動并Demo連接數(shù)據(jù)庫測試

    若該文為原創(chuàng)文章,轉(zhuǎn)載請注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130381428 紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機(jī)、軟硬結(jié)合等等)持續(xù)更新中… ??mysql驅(qū)動版本msvc2015x32版本調(diào)

    2023年04月26日
    瀏覽(50)
  • 【QT5:CAN卡通信的上位機(jī)-代碼練習(xí)-收發(fā)數(shù)據(jù)+布局+引用外部庫+基礎(chǔ)樣例(1)】

    【QT5:CAN卡通信的上位機(jī)-代碼練習(xí)-收發(fā)數(shù)據(jù)+布局+引用外部庫+基礎(chǔ)樣例(1)】

    有句話叫做,出來還混,早晚是要還得,當(dāng)時為快點(diǎn)使用完成can的qt上位機(jī),偶然在網(wǎng)上找到一個樣例,正好能運(yùn)行,就直接拿著那個樣例進(jìn)行改了,后來上位機(jī)遇到點(diǎn)精準(zhǔn)時間問題,一時間不知道如何調(diào),正好也借著這個機(jī)會,學(xué)習(xí)一下樣例代碼,純手打一遍。 實(shí)驗(yàn)環(huán)境還

    2024年02月01日
    瀏覽(225)
  • QT基礎(chǔ)篇(12)QT5多線程

    在任何一門語言中,多線程都是一個相對其他方面比較重要的點(diǎn),這里面的知識體系很龐大,同步和異步之間的處理方式,以及IO多路復(fù)用等等各種進(jìn)行性能優(yōu)化的方面,在往上層一點(diǎn)我們不可能一直進(jìn)行系統(tǒng)層次的調(diào)用,這樣太費(fèi)時間也太麻煩,就到設(shè)計(jì)模式這里,比如反

    2024年01月22日
    瀏覽(21)
  • QT基礎(chǔ)篇(10)QT5網(wǎng)絡(luò)與通信

    QT5網(wǎng)絡(luò)與通信是指在QT5開發(fā)環(huán)境中使用網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸和通信的相關(guān)功能和技術(shù)。 QT5提供了一套完善的網(wǎng)絡(luò)模塊,包括了TCP、UDP、HTTP等協(xié)議的支持,可以方便地在QT應(yīng)用程序中進(jìn)行網(wǎng)絡(luò)通信。通過QT5的網(wǎng)絡(luò)模塊,開發(fā)者可以實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)傳輸、消息推送、

    2024年01月19日
    瀏覽(24)
  • QT基礎(chǔ)篇(16)QT5單元測試框架

    1.QTEstLib框架 QTestLib框架是一個用于軟件測試的開源框架,是Qt工具套件的一部分。它提供了一組用于編寫自動化測試和單元測試的類和函數(shù)。 QTestLib可以方便地為Qt應(yīng)用程序編寫單元測試,包括測試GUI和非GUI的代碼。它提供了一系列斷言和輔助函數(shù),用于驗(yàn)證測試的預(yù)期結(jié)果

    2024年01月25日
    瀏覽(14)
  • QT基礎(chǔ)篇(15)QT5多國語言國際化

    1.基本概念 1.1國際化支持的實(shí)現(xiàn) 語言國際化(Localization)是指將軟件、網(wǎng)站或應(yīng)用程序適應(yīng)不同語言、地區(qū)和文化的過程。實(shí)現(xiàn)語言國際化支持可以通過以下幾個步驟: 提取可本地化的文本:將軟件或應(yīng)用程序中需要翻譯的文本內(nèi)容提取出來,例如界面文本、按鈕標(biāo)簽、錯

    2024年01月24日
    瀏覽(24)
  • 基于Qt數(shù)據(jù)庫項(xiàng)目實(shí)現(xiàn)(Sqlite3為例)|考查數(shù)據(jù)庫、繪制(畫家)、事件等知識點(diǎn)(進(jìn)階)

    堅(jiān)持最初的夢想,揚(yáng)帆起航,乘風(fēng)破浪,永不言敗。 01 數(shù)據(jù)庫 數(shù)據(jù)庫是什么?簡易言之,就是保存數(shù)據(jù)的文件??梢源鎯Υ罅繑?shù)據(jù),包括插入數(shù)據(jù)、更新數(shù)據(jù)、截取數(shù)據(jù)等。用專業(yè)術(shù)語來說,數(shù)據(jù)庫是“按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫”。是一個長期存儲在計(jì)

    2024年02月19日
    瀏覽(21)
  • Windows+Qt5.14.2+android x86配置與處理adb報錯

    Windows+Qt5.14.2+android x86配置與處理adb報錯

    資源下載 可在部分國內(nèi)鏡像源下載Qt5.14.2:Index of /qt/archive/qt/ | 清華大學(xué)開源軟件鏡像站 | Tsinghua Open Source Mirror 其他工具 android studio:下載 Android Studio 和應(yīng)用工具 - Android 開發(fā)者 ?|? Android Developers sdk manager 、ndk、java 安裝過程 根據(jù)qt5.14.2自助選擇需要安裝的anroid組件等、vs2

    2024年01月20日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包