QT學習(6)——QT中的定時器事件,兩種實現方式;事件的分發event,事件過濾器

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

目錄

  • 引出
  • 定時器事件
    • QTimerEvent
    • QTimer
  • 事件的分發
    • 事件過濾器
  • 總結
  • QT中的鼠標事件
    • 定義QLable的鼠標進入離開事件
    • 提升為myLabel
    • 重寫QLabel的函數
      • 鼠標的事件
      • 鼠標的左中右鍵枚舉
      • 鼠標多事件獲取和鼠標移動
      • 鼠標追蹤
  • QT中的信號和槽
    • 自定義信號和槽
      • 1.自定義信號
      • 2.自定義槽
      • 3.建立連接
      • 4.進行觸發
    • 自定義信號重載
      • 帶參數的
      • 按鈕觸發
      • 信號觸發信號
      • 拓展
    • lambda表達式
      • 返回值
      • mutable修飾
      • 案例

引出

QT學習(6)——QT中的定時器事件,兩種實現方式;事件的分發event,事件過濾器

在這里插入圖片描述


定時器事件

QTimerEvent

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();// 重寫定時器事件void timerEvent(QTimerEvent *);int id1; // 定時器1的唯一標識int id2; // 定時器2的唯一標識private:Ui::Widget *ui;
};
#endif // WIDGET_H

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

如何定義多個定義器事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 啟動定時器// 參數1 間隔 單位 毫秒id1 = startTimer(1000);id2 = startTimer(2000);
}void Widget::timerEvent(QTimerEvent * ev)
{if(ev->timerId()==id1){static int num =1;// label1 每間隔1秒ui->label_2->setText(QString::number(num++));}// label2 每間隔2sif(ev->timerId()==id2){static int num2 = 1;ui->label_3->setText(QString::number(num2++));}// label3 每間隔3s}Widget::~Widget()
{delete ui;
}

QTimer

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

定時器實現的另一種方式:實例化定時器QTimer 然后加到對象樹上

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

進行定時信號的發送和處理

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

#include "widget.h"
#include "ui_widget.h"
#include <QTimer> // 定時器的類Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 啟動定時器// 參數1 間隔 單位 毫秒id1 = startTimer(1000);id2 = startTimer(2000);// 定時器的第二種方式,實例化,加到對象樹上QTimer *timer = new QTimer(this);//  啟動定時器timer->start(500); // 每隔500msconnect(timer,&QTimer::timeout,[=](){static int num = 1;ui->label_4->setText(QString::number(num++));});// 點擊暫停按鈕,停止定時器connect(ui->btnStop,&QPushButton::clicked,[=](){timer->stop();});}void Widget::timerEvent(QTimerEvent * ev)
{if(ev->timerId()==id1){static int num =1;// label1 每間隔1秒ui->label_2->setText(QString::number(num++));}// label2 每間隔2sif(ev->timerId()==id2){static int num2 = 1;ui->label_3->setText(QString::number(num2++));}// label3 每間隔3s}Widget::~Widget()
{delete ui;
}

事件的分發

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

通過重寫event事件分發器,攔截鼠標按下的的事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

事件的枚舉類型

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

靜態類型轉換方法

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

鼠標按下的事件攔截,自己處理,返回True;
其他事件交給父類進行處理,默認處理;

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

bool myLabel::event(QEvent *e)
{// 如果是鼠標按下,在event事件分發中做攔截操作if(e->type()==QEvent::MouseButtonPress){QString str1 = QString("鼠標按下了,在event事件分發中處理");qDebug() << str1;// 需要進行類型轉換QMouseEvent * ev = static_cast<QMouseEvent *>(e);QString str = QString("鼠標按下了,x=%1,y=%2; global坐標為:x=%3,y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());qDebug() << str;return true; // 代表用戶自己處理,不向下分發}// 其他事件,交給父類處理,默認處理return QLabel::event(e);
}

事件過濾器

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

可以在event之前,再做一次高級的攔截

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

步驟:1.給label1安裝事件過濾器

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

步驟二:重寫事件過濾器的事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

這里有兩個參數,obj 和 e,一個用于判斷控件,另一個用來判斷事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

#include "widget.h"
#include "ui_widget.h"
#include <QTimer> // 定時器的類
#include <QDebug>
#include <QMouseEvent>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 啟動定時器// 參數1 間隔 單位 毫秒id1 = startTimer(1000);id2 = startTimer(2000);// 定時器的第二種方式,實例化,加到對象樹上QTimer *timer = new QTimer(this);//  啟動定時器timer->start(500); // 每隔500msconnect(timer,&QTimer::timeout,[=](){static int num = 1;ui->label_4->setText(QString::number(num++));});// 點擊暫停按鈕,停止定時器connect(ui->btnStop,&QPushButton::clicked,[=](){timer->stop();});}void Widget::timerEvent(QTimerEvent * ev)
{if(ev->timerId()==id1){static int num =1;// label1 每間隔1秒ui->label_2->setText(QString::number(num++));}// label2 每間隔2sif(ev->timerId()==id2){static int num2 = 1;ui->label_3->setText(QString::number(num2++));}// 給label1安裝事件過濾器// 步驟1:安裝事件的過濾器ui->label->installEventFilter(this);
}bool Widget::eventFilter(QObject * obj, QEvent * e){if(obj == ui->label){if(e->type() == QEvent::MouseButtonPress){QMouseEvent * ev = static_cast<QMouseEvent *>(e);QString str = QString("事件過濾器===鼠標按下了,x=%1,y=%2; global坐標為:x=%3,y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());qDebug() << str;return true;}}// 其他默認處理return QWidget::eventFilter(obj,e);}Widget::~Widget()
{delete ui;
}

總結

QT學習(6)——QT中的定時器事件,兩種實現方式;事件的分發event,事件過濾器

QT中的鼠標事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

定義QLable的鼠標進入離開事件

注意這里的QWidget后面要改成QLabel

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

#include "mylabel.h"
#include <QDebug>myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}// 鼠標進入
void myLabel::enterEvent(QEvent *event)
{qDebug() << "鼠標進入了";
}// 鼠標離開
void myLabel::leaveEvent(QEvent *)
{qDebug() << "鼠標離開了";
}

提升為myLabel

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

重寫QLabel的函數

鼠標的事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

基于控件的

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

鼠標的左中右鍵枚舉

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

鼠標多事件獲取和鼠標移動

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

頭文件

#ifndef MYLABEL_H
#define MYLABEL_H#include <QLabel>class myLabel : public QLabel
{Q_OBJECT
public:explicit myLabel(QWidget *parent = nullptr);// 鼠標進入void enterEvent(QEvent *event);// 鼠標離開void leaveEvent(QEvent *);// 鼠標放下和釋放virtual void mousePressEvent(QMouseEvent *ev);virtual void mouseReleaseEvent(QMouseEvent *ev);// 鼠標的移動virtual void mouseMoveEvent(QMouseEvent *ev);signals:};#endif // MYLABEL_H

cpp文件

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}// 鼠標進入
void myLabel::enterEvent(QEvent *event)
{
//    qDebug() << "鼠標進入了";
}// 鼠標離開
void myLabel::leaveEvent(QEvent *)
{
//    qDebug() << "鼠標離開了";
}// 鼠標放下和釋放
void myLabel::mousePressEvent(QMouseEvent *ev)
{// 鼠標左鍵按下打印if(ev->button() == Qt::LeftButton){QString str = QString("鼠標按下了,x=%1,y=%2; global坐標為:x=%3,y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());qDebug() << str;}}
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{qDebug() << "鼠標釋放";
}// 鼠標的移動
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{if(ev->buttons() & Qt::LeftButton){qDebug() << "鼠標移動";}
}

鼠標追蹤

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

QT中的信號和槽

自定義信號和槽

1.自定義信號

寫到signals下
返回void
需要聲明,不需要實現
可以有參數,可以重戟

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2.自定義槽

返回void
需要聲明,也需要實現
可以有參數,可以重載
寫到public slot下或者public或者全局函數

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

3.建立連接

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

// 老師餓了,學生請吃飯
connect(te,&Teacher::hungry,st,&Student::treat);

4.進行觸發

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

自定義信號重載

當自定義信號和槽出現重載
8.1 需要利用還數指針明確指向函數的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString轉成char *
8.3.1.ToUtf80轉為QByteArray
8.3.2.Data0轉為Char *
8.4信號可以連接信號
8.5斷開信號disconnect

帶參數的

    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;void (Student::*StudentSlot)(QString) = &Student::treat;

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

void Student::treat(QString foodName){// QString -> char * 先轉成QByteArray(.toUtf8())  再轉成Char* ()qDebug() << "請老師吃。。。" << foodName.toUtf8().data();
}

按鈕觸發

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    // 用一個按鈕調用下課QPushButton *btn = new QPushButton("下課了",this);// 重置窗口daxiaothis->resize(600,400);connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

信號觸發信號

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    // 無參的信號和槽連接void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;void (Student::*StudentSlot2)(void) = &Student::treat;connect(te,teacherSignal2,st,StudentSlot2);// 信號連接信號connect(btn,&QPushButton::clicked,te,teacherSignal2);

斷開信號disconnect

拓展

1、信號是可以連接信號
2、一個信號可以連接多個槽函數
3、多個信號可以連接同一個糟函數
4、信號和槽函數的參數必須類型一一對應
5、信號和槽的參數個數是不是要一致?信號的參數個數可以多余槽函數的參數個數

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

connect(信號的發送者,發送的信號signal信號),信號接受者,槽函數SLOT)
優點:參數直觀
缺點:編譯器不會檢測爸數類型:

lambda表達式

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳在這里插入圖片描述

在這里插入圖片描述

    [=](){btn->setText("aaa");}();

返回值

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    int ret = []()->int{return 1000;}();qDebug() << "ret = " << ret;

mutable修飾

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    QPushButton *myBtn1 = new QPushButton(this);QPushButton *myBtn2 = new QPushButton(this);myBtn1->move(100,100);int m = 10;connect(myBtn1,&QPushButton::clicked,this,[m]()mutable {m=100+10;qDebug()<< m;});connect(myBtn2,&QPushButton::clicked,this,[=](){qDebug()<<m;});qDebug() << m;

案例

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    QPushButton * btnClose = new QPushButton;btnClose->setText("close");btnClose->move(100,0);btnClose->setParent(this);connect(btnClose,&QPushButton::clicked,this,[=](){btnClose->setText("關閉");emit te->hungry("娃哈哈");
//        this->close();});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43148.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 類和對象 拷貝構造函數

一 拷貝構造函數的概念&#xff1a; 拷貝構造函數是一種特殊的構造函數&#xff0c;用于創建一個對象是另一個對象的副本。當需要用一個已存在的對象來初始化一個新對象時&#xff0c;或者將對象傳遞給函數或從函數返回對象時&#xff0c;會調用拷貝構造函數。 二 拷貝構造函…

打卡第6天----哈希表

每天進步一點點,滴水石穿,日積月累,不斷提升。 數組和鏈表章節告一段落。開啟哈希表相關的。 哈希表能解決什么問題呢,一般哈希表都是用來快速判斷一個元素是否出現集合里 一、有效的字母異位詞 leetcode題目編號:242 題目描述: 給定兩個字符串 s 和 t ,編寫一個函數…

安裝和配置 MSYS2

MSYS2&#xff08;Minimal SYStem 2&#xff09;是一個為Windows平臺提供的輕量級Linux類系統&#xff0c;它集成了大量的GNU工具鏈、工具和庫&#xff0c;為開發者提供了一個類似于Linux的shell環境和完整的開發環境。以下是關于MSYS2的詳細介紹&#xff1a; 一、定義與特點 …

深入理解Java中的泛型編程

深入理解Java中的泛型編程 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. 泛型的基礎概念 在Java中&#xff0c;泛型編程是一種強大的編程范式&#xff0c;它允許我們編寫可以操作各種類型的代…

vagrant遠程連接不上問題

如果使用的是vbox虛擬機的host_only的默認ip為56.1開頭如果使用這個1作為地址&#xff0c;只能使用轉發的形式連接&#xff0c;宿主機使用ssh -p 22222 name127.0.0.1 連接&#xff0c;如果配置的主機位大于1則可以使用虛擬機的ip地址連接。 1使用網絡地址轉換&#xff08;ant…

Linux忘記密碼重置root密碼、重置普通用戶密碼

重啟看到選項按e reboot 或 init 62、移動到Linux開頭的行在末尾添加 rw init/bin/bash3、按下Ctrlx引導啟動 mount -o remount,rw /輸入命令回車更改密碼,輸入新密碼&#xff0c;別用小鍵盤&#xff0c;容易出錯 passwd輸入兩次校驗&#xff0c;出現updated successfully就…

OceanBase 配置項系統變量實現及應用詳解(1):配置項的定義及使用方法

《OceanBase 配置項&系統變量實現及應用詳解》專題導讀 在使用OceanBase的過程中&#xff0c;看到大家經常會遇到“參數”、“配置項”、“系統變量”等概念&#xff0c;卻不太清楚它們是不是同一個東西&#xff0c;以及應該如何使用。一些對數據庫開發感興趣的朋友&#…

開源大模型對比

隨著chatgpt誕生&#xff0c;開源大模型的也獲得了突飛猛進的進展&#xff0c;值得關注的是國內本地私有大模型已經在很多真實的場景中落地&#xff0c;比如智能客服。美國的技術研發能力遙遙領先&#xff0c;但是不得不說落地應用這塊是我們的強項。企業使用大模型一般需要考慮…

【面向就業的Linux基礎】從入門到熟練,探索Linux的秘密(九)-git(1)

Git是一個版本管理控制系統&#xff08;縮寫VCS&#xff09;&#xff0c;它可以在任何時間點&#xff0c;將文檔的狀態作為更新記錄保存起來&#xff0c;也可以在任何時間點&#xff0c;將更新記錄恢復回來。 文章目錄 前言 一、git是什么 二、git基本概念 三、git基本命令 總結…

電商項目中分與元金額單位互轉實戰

在Java開發中&#xff0c;可能遇到金額單位的轉換&#xff0c;比如本系統用分作為金額的基本單位&#xff0c;對方系統用元作為金額的基本單位&#xff0c;這就需要進行單位轉換&#xff0c;記錄下來&#xff0c;方便備查。 一、分轉元 分轉元&#xff0c;分到元相差兩位&…

PHP源碼:新聞門戶系統(附管理后臺+前臺)

一. 前言 今天小編給大家帶來了一款可學習&#xff0c;可商用的&#xff0c;新聞門戶系統 源碼&#xff0c;支持二開&#xff0c;無加密。項目可以擴展為個人博客&#xff0c;和一些社交論壇網址。主要功能&#xff1a;支持文章管理&#xff0c;評論管理&#xff0c;分類管理等…

Kotlin linkedMapOf filterKeys

Kotlin linkedMapOf filterKeys fun main(args: Array<String>) {val lhm linkedMapOf<String, Any>(Pair("name", "phil"), //因為key相同都為 name&#xff0c;被后面的覆蓋。Pair("year", 2024),Pair("name", "f…

大語言模型的應用探索AI Agent初探!

前言 大語言模型的應用之一是與大語言模型進行聊天也就是一個ChatBot&#xff0c;這個應用已經很廣泛了。 接下來的一個應用就是AI Agent。 AI Agent是人工智能代理&#xff08;Artificial Intelligence Agent&#xff09;的概念&#xff0c;它是一種能夠感知環境、進行決策…

消防認證-防火窗

一、消防認證 消防認證是指消防產品符合國家相關技術要求和標準&#xff0c;且通過了國家認證認可監督管理委員會審批&#xff0c;獲得消防認證資質的認證機構頒發的證書&#xff0c;消防產品具有完好的防火功能&#xff0c;是住房和城鄉建設領域驗收的重要指標。 二、認證依據…

GEE代碼實例教程詳解:NDVI時間序列趨勢分析

簡介 在本篇博客中&#xff0c;我們將使用Google Earth Engine (GEE) 對MODIS NDVI數據進行時間序列趨勢分析。通過分析2001年至2021年的NDVI數據&#xff0c;我們可以了解植被覆蓋度隨時間的變化趨勢。 背景知識 MODIS數據集 MODIS&#xff08;Moderate Resolution Imagin…

Websocket在Java中的實踐——整合Rabbitmq和STOMP

大綱 Rabbitmq開啟STOMP支持 服務端依賴參數參數映射類配置類邏輯處理類 測試測試頁面Controller測試案例 在《Websocket在Java中的實踐——STOMP通信的最小Demo》一文中&#xff0c;我們使用enableSimpleBroker啟用一個內置的內存級消息代理。本文我們將使用Rabbitmq作為消息代…

【Unity2D 2022:Particle System】添加拾取粒子特效

一、創建粒子特效游戲物體 二、修改粒子系統屬性 1. 基礎屬性 &#xff08;1&#xff09;修改發射粒子持續時間&#xff08;Duration&#xff09;為3s &#xff08;2&#xff09;取消勾選循環&#xff08;Looping&#xff09; &#xff08;2&#xff09;修改粒子存在時間&…

SQL性能優化策略

發現問題 通過業務監控發現慢SQL或接口響應延遲。利用性能分析工具定位問題。 定位SQL語句 使用監控工具確定影響性能的SQL語句和表。 SQL查詢變慢原因 索引失效&#xff1a;查詢未使用索引或索引效率低。多表連接&#xff1a;JOIN操作導致性能下降。查詢字段過多&#xf…

Monitor結構解讀之EntryQ和WaitSet的區別

EntryQ&#xff08;或_EntryList&#xff09;和WaitSet&#xff08;或_WaitSet&#xff09;在Java的monitor機制中扮演著不同的角色&#xff0c;它們之間的主要區別體現在以下幾個方面&#xff1a; 1. 等待原因和機制 EntryQ&#xff08;或_EntryList&#xff09;&#xff1a…