Qt事件传播机制 day8

news2025/1/31 3:14:24

Qt事件传播机制 day8

事件的接受和忽略

  • 当空间忽略事件时,事件会继续往上传播,这里的传播指传播给父组件
  • QEvent有accept()函数与ignore()函数
    • accept():本组件处理该事件,这个事件就不会被继续传播给其父组件
    • ignore():本组件不想要处理这个事件,这个事件会被继续传播给其父组件
    • 所有的事件是默认接受的
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMouseEvent>
#include <QKeyEvent>
class Button :public QPushButton
{
public:
	Button(const QString& text, QWidget* parent = nullptr) :QPushButton(text, parent)
	{

	}
protected:
	bool event(QEvent* ev) override
	{
		if (ev->type() == QEvent::Type::KeyPress)
		{
			//获取当前按下的按键
			QKeyEvent* kev = dynamic_cast<QKeyEvent*>(ev);
			qDebug() << Qt::Key(kev->key());

			//当回车键按下,我们忽略事件。原理是,我们直接在这返回,不会传递到父组件去进行处理,下面的信号的按钮按下就不会触发了
			//忽略事件
			return true;
		}
		return QPushButton::event(ev);//返回true表示事件已经处理完成,否则表示忽略
	}
	void mousePressEvent(QMouseEvent* ev) override
	{
		qDebug() << __FUNCSIG__;

		//ev->accept();//默认调用的
		ev->ignore();//忽略事件处理,事件将传播到父组件
	}
};

class Widget :public QWidget
{
	Q_OBJECT
public:
	Widget(QWidget* parent = nullptr) :QWidget(parent)
	{
		Button* btn = new Button("小瓜",this);
		//设置按钮为默认按钮
		btn->setDefault(true);

		connect(btn, &Button::clicked, this, []()
			{
				qDebug() << "按钮按下";
			}
		);
	}
	
protected:
	void mousePressEvent(QMouseEvent* ev) override
	{
		qDebug() << __FUNCSIG__;
	}

};

int main(int argc, char* argv[])
{
	QApplication a(argc, argv);
	Widget w;
	w.setWindowIcon(QIcon(":/Resource/tubiao.ico"));
	w.show();
	
	return a.exec();
}
#include "main.moc"
  • 运行结果
    在这里插入图片描述

事件传播机制和MyApp

事件分发

  • Qt的事件产生之后,不是直接传递给了对象的,需要经过一系列的过程。
    在这里插入图片描述
  • 事件首先由Qt的ServerApplication去接收来自于外部或内部的一些行为,鼠标点击,键盘输入,时钟事件等,分析并决定送往对应的对象去处理(内部管理机制),最后会调用[virtual] bool QCoreApplication::notify ( QObject * receiver, QEvent * event ) 去处理,当然这个是虚函数,你可以在子类去重新实现它 。
  • 在notify(…)中,在发给对应的接收者前,会先把消息送给QApplication。所以如果想在你界面的Widget前先处理那些事 件,那么你可以给QApplication对象installEventFilter,然后在对应的eventFilter()里先把这些事件都给过一 遍,然后你可以过滤一些不必要事件。
  • 如果QApplication没有处理那些事件,然后就是交给事件接收对象了。在这个对象接收前,也可以为这对象加一个事件过滤器,同样是 installEventFilter。
  • 如果eventFilter没有过滤某些事件,那么就会将事件交给接收者的event()函数(你可以根据不同类型的事件尽情处理),如果event事件在接受者处理后,也不会上传给父类的event,否则会上传进入父类的event。
  • 默认event()函数根据事件类型会调用不同的事件处理函数,类似mousePressEvent(),keyPressEvent()去分别处理他们。
    在这里插入图片描述
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMouseEvent>
#include <QKeyEvent>

//作为单独的一个实例
#define myApp static_cast<MyApp*>(qApp)

//应用程序类
class MyApp :public QApplication
{
public:
	//将其构造函数继承过来
	using QApplication::QApplication;
	//一般不会用这个函数,因为无论是那个窗口那个对象的事件都会通过这个函数来发
	//除非你真的需要无论在那个窗口或者那个键需要干什么事情,在来这个上面写
	//重写notify
	/*bool notify(QObject* receiver, QEvent* ev) override
	{
		if (ev->type() == QEvent::Close)
		{
			qDebug() << "退出";
		}
		return true;
	}*/
	//放一些所有程序或者是窗口可能会访问的数据,就可以不用全局变量了
	void addValue(const QString& key, const QVariant& v)
	{
		m_config.insert(key, v);
	}
	QVariant value(const  QString& key)
	{
		return m_config.value(key);
	}
protected:
	QMap<QString, QVariant> m_config;
};


class Widget :public QWidget
{
	Q_OBJECT
public:
	Widget(QWidget* parent = nullptr) :QWidget(parent)
		,btn(new QPushButton("获取信息", this))
	{
		connect(btn, &QPushButton::clicked, this, []()
			{
				qDebug() << myApp->value("appName") << myApp->value("version");
			}
		);
	}

protected:
	QPushButton* btn{};
};

int main(int argc, char* argv[])
{
	MyApp a(argc, argv);
	a.addValue("appName", "小瓜");
	a.addValue("version", "1.0");

	Widget w;
	w.setWindowIcon(QIcon(":/Resource/tubiao.ico"));
	w.show();
	
	return a.exec();
}
#include "main.moc"
  • 运行结果
    在这里插入图片描述

安装事件过滤器

  • QObject::installEventFilter()函数通过设置一个事件过滤器来实现这一点,使指定的过滤器对象在其QObject::eventFilter()函数中接收目标对象的事件。
  • eventFilter返回false允许对事件进行进一步处理,返回true停止处理
    在这里插入图片描述
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMouseEvent>
#include <QKeyEvent>

//单独写一个类来过滤
class SEventFilterObject :public QObject
{
public:
	//这样才没有内存泄漏
	SEventFilterObject(QObject* parent = nullptr) :QObject(parent)
	{

	}
	~SEventFilterObject() 
	{
		qDebug() << __FUNCTION__;
	}
	bool eventFilter(QObject* watched, QEvent* event)
	{
		if (event->type() == QEvent::MouseButtonPress)
		{
			return true;//返回true表示被处理了,不会发到event了
		}
		else if (event->type() == QEvent::MouseButtonDblClick)
		{
			return true;
		}
		return false;
	}
};
class Widget :public QWidget
{
	Q_OBJECT
public:
	Widget(QWidget* parent = nullptr) :QWidget(parent)
	{
		//安装事件过滤器
		//installEventFilter(this);
		installEventFilter(new SEventFilterObject);

		//取消安装事件过滤器
		//installEventFilter(nullptr);
	}
protected:
	//事件过略器
	//bool eventFilter(QObject* watched, QEvent* event)
	//{
	//	if (event->type() == QEvent::MouseButtonPress)
	//	{
	//		return true;//返回true表示被处理了,不会发到event了
	//	}
	//	else if (event->type() == QEvent::MouseButtonDblClick)
	//	{
	//		return true;
	//	}	
	//	return false; 
	//}
	void mousePressEvent(QMouseEvent* ev) override
	{
		qDebug() << __FUNCSIG__;
	}
};

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

	Widget w;
	w.setWindowIcon(QIcon(":/Resource/tubiao.ico"));
	w.show();
	
	return a.exec();
}
#include "main.moc"
  • 运行结果,鼠标点击已经无法生效事件输出
    在这里插入图片描述

无边框窗口(异形窗口)的拖动

  • 思路
    在这里插入图片描述
  • SEventFilterObject.cpp
#include "SEventFilterObject.h"

SEventFilterObject::SEventFilterObject(QObject* parent):QObject(parent)
{

}

SEventFilterObject::~SEventFilterObject()
{
	std::cout<< __FUNCTION__;
}

bool SEventFilterObject::eventFilter(QObject* watched, QEvent* event)
{
	QWidget* w = dynamic_cast<QWidget*>(watched);
	//如果窗口没有边框,才对点击窗口客户区移动窗口
	if (w->windowFlags() & Qt::FramelessWindowHint)
	{
		//获取鼠标点击事件
		QMouseEvent* ev = dynamic_cast<QMouseEvent*>(event);

		if (event->type() == QEvent::MouseButtonPress && ev->button() == Qt::MouseButton::LeftButton)
		{
			m_pos = ev->pos();
		}
		else if (event->type() == QEvent::MouseButtonRelease && ev->button() == Qt::MouseButton::LeftButton)
		{
			m_pos = { 0,0 };
		}
		else if (event->type() == QEvent::MouseMove && ev->buttons() & Qt::LeftButton)
		{
			w->move(ev->globalPos() - m_pos);
		}
	}
	return false;
}
  • SEventFilterObject.h
#ifndef SEVENTFILTEROBJECT_H_
#define SEVENTFILTEROBJECT_H_
#include <iostream>
#include <QObject>
#include <QWidget>
#include <QEvent>
#include <QPoint>
#include <QMouseEvent>

class SEventFilterObject : public QObject
{
public:
	//构造函数
	SEventFilterObject(QObject* parent = nullptr);
	~SEventFilterObject();
	bool eventFilter(QObject* watched, QEvent* event)override;
protected:
	QPoint m_pos;
};

#endif // !SEVENTFILTEROBJECT_H_

  • main.cpp
#include <QApplication>
#include <QWidget>
#include <QMouseEvent>
#include <QPushButton>
#include <QPointer>
#include "SEventFilterObject.h"
class Widget :public QWidget
{
public:
	Widget(QWidget* parent = nullptr) :QWidget(parent)
		,m_close(new QPushButton("X",this))
	{
		resize(400, 400);
		m_close->setFixedSize(50, 50);
		m_close->move(width() - m_close->width(), 0);

		//设置鼠标追踪
		setMouseTracking(true);

		//去掉窗口边框
		setWindowFlag(Qt::FramelessWindowHint, true);

		//安装过滤器
		installEventFilter(new  SEventFilterObject(this));

		connect(m_close, &QPushButton::clicked, this, [=]()
			{
				close();
			}
		);
	}
	~Widget()
	{
		qDebug() << __FUNCTION__;
	}
protected:
	

private:
	QPushButton* m_close{};
};
int main(int argc,char* argv[])
{
	QApplication a(argc, argv);
	Widget w;
	w.show();
	return a.exec();
}
  • 运行结果
    请添加图片描述

事件类型

这个枚举类型定义了Qt中有效的事件类型。事件类型和每个类型的专门类如下:

常量描述
QEvent::None0不是一个事件
QEvent::ActionAdded114一个新 action 被添加(QActionEvent)
QEvent::ActionChanged113一个 action 被改变(QActionEvent)
QEvent::ActionRemoved115一个 action 被移除(QActionEvent)
QEvent::ActivationChange99Widget 的顶层窗口激活状态发生了变化
QEvent::ApplicationActivate121这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationActivatedApplicationActivate这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationDeactivate122这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationFontChange36应用程序的默认字体发生了变化
QEvent::ApplicationLayoutDirectionChange37应用程序的默认布局方向发生了变化
QEvent::ApplicationPaletteChange38应用程序的默认调色板发生了变化
QEvent::ApplicationStateChange214应用程序的状态发生了变化
QEvent::ApplicationWindowIconChange35应用程序的图标发生了变化
QEvent::ChildAdded68一个对象获得孩子(QChildEvent)
QEvent::ChildPolished69一个部件的孩子被爆光(QChildEvent)
QEvent::ChildRemoved71一个对象时区孩子(QChildEvent)
QEvent::Clipboard40剪贴板的内容发生改变
QEvent::Close19Widget 被关闭(QCloseEvent)
QEvent::CloseSoftwareInputPanel200一个部件要关闭软件输入面板(SIP)
QEvent::ContentsRectChange178部件内容区域的外边距发生改变
QEvent::ContextMenu82上下文弹出菜单(QContextMenuEvent)
QEvent::CursorChange183部件的鼠标发生改变
QEvent::DeferredDelete52对象被清除后将被删除(QDeferredDeleteEvent)
QEvent::DragEnter60在拖放操作期间鼠标进入窗口部件(QDragEnterEvent)
QEvent::DragLeave62在拖放操作期间鼠标离开窗口部件(QDragLeaveEvent)
QEvent::DragMove61拖放操作正在进行(QDragMoveEvent)
QEvent::Drop63拖放操作完成(QDropEvent)
QEvent::DynamicPropertyChange170动态属性已添加、更改或从对象中删除
QEvent::EnabledChange98部件的 enabled 状态已更改
QEvent::Enter10鼠标进入部件的边界(QEnterEvent)
QEvent::EnterEditFocus150编辑部件获得焦点进行编辑,必须定义 QT_KEYPAD_NAVIGATION
QEvent::EnterWhatsThisMode124当应用程序进入“What’s This?”模式,发送到 toplevel 顶层部件
QEvent::Expose206当其屏幕上的内容无效,发送到窗口,并需要从后台存储刷新
QEvent::FileOpen116文件打开请求(QFileOpenEvent)
QEvent::FocusIn8部件或窗口获得键盘焦点(QFocusEvent)
QEvent::FocusOut9部件或窗口失去键盘焦点(QFocusEvent)
QEvent::FocusAboutToChange23部件或窗口焦点即将改变(QFocusEvent)
QEvent::FontChange97部件的字体发生改变
QEvent::Gesture198触发了一个手势(QGestureEvent)
QEvent::GestureOverride202触发了手势覆盖(QGestureEvent)
QEvent::GrabKeyboard188Item 获得键盘抓取(仅限 QGraphicsItem)
QEvent::GrabMouse186项目获得鼠标抓取(仅限 QGraphicsItem)
QEvent::GraphicsSceneContextMenu159在图形场景上的上下文弹出菜单(QGraphicsScene ContextMenuEvent)
QEvent::GraphicsSceneDragEnter164在拖放操作期间,鼠标进入图形场景(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDragLeave166在拖放操作期间鼠标离开图形场景(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDragMove165在场景上正在进行拖放操作(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDrop167在场景上完成拖放操作(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneHelp163用户请求图形场景的帮助(QHelpEvent)
QEvent::GraphicsSceneHoverEnter160鼠标进入图形场景中的悬停项(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneHoverLeave162鼠标离开图形场景中一个悬停项(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneHoverMove161鼠标在图形场景中的悬停项内移动(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneMouseDoubleClick158鼠标在图形场景中再次按下(双击)(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMouseMove155鼠标在图形场景中移动(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMousePress156鼠标在图形场景中按下(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMouseRelease157鼠标在图形场景中释放(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMove182部件被移动(QGraphicsSceneMoveEvent)
QEvent::GraphicsSceneResize181部件已调整大小(QGraphicsSceneResizeEvent)
QEvent::GraphicsSceneWheel168鼠标滚轮在图形场景中滚动(QGraphicsSceneWheelEvent)
QEvent::Hide18部件被隐藏(QHideEvent)
QEvent::HideToParent27子部件被隐藏(QHideEvent)
QEvent::HoverEnter127鼠标进入悬停部件(QHoverEvent)
QEvent::HoverLeave128鼠标留离开悬停部件(QHoverEvent)
QEvent::HoverMove129鼠标在悬停部件内移动(QHoverEvent)
QEvent::IconDrag96窗口的主图标被拖走(QIconDragEvent)
QEvent::IconTextChange101部件的图标文本发生改变(已弃用)
QEvent::InputMethod83正在使用输入法(QInputMethodEvent)
QEvent::InputMethodQuery207输入法查询事件(QInputMethodQueryEvent)
QEvent::KeyboardLayoutChange169键盘布局已更改
QEvent::KeyPress6键盘按下(QKeyEvent)
QEvent::KeyRelease7键盘释放(QKeyEvent)
QEvent::LanguageChange89应用程序翻译发生改变
QEvent::LayoutDirectionChange90布局的方向发生改变
QEvent::LayoutRequest76部件的布局需要重做
QEvent::Leave11鼠标离开部件的边界
QEvent::LeaveEditFocus151编辑部件失去编辑的焦点,必须定义 QT_KEYPAD_NAVIGATION
QEvent::LeaveWhatsThisMode125当应用程序离开“What’s This?”模式,发送到顶层部件
QEvent::LocaleChange88系统区域设置发生改变
QEvent::NonClientAreaMouseButtonDblClick176鼠标双击发生在客户端区域外
QEvent::NonClientAreaMouseButtonPress174鼠标按钮按下发生在客户端区域外
QEvent::NonClientAreaMouseButtonRelease175鼠标按钮释放发生在客户端区域外
QEvent::NonClientAreaMouseMove173鼠标移动发生在客户区域外
QEvent::MacSizeChange177用户更改了部件的大小(仅限 OS X)
QEvent::MetaCall43通过 QMetaObject::invokeMethod() 调用异步方法
QEvent::ModifiedChange102部件修改状态发生改变
QEvent::MouseButtonDblClick4鼠标再次按下(QMouseEvent)
QEvent::MouseButtonPress2鼠标按下(QMouseEvent)
QEvent::MouseButtonRelease3鼠标释放(QMouseEvent)
QEvent::MouseMove5鼠标移动(QMouseEvent)
QEvent::MouseTrackingChange109鼠标跟踪状态发生改变
QEvent::Move13部件的位置发生改变(QMoveEvent)
QEvent::NativeGesture197系统检测到手势(QNativeGestureEvent)
QEvent::OrientationChange208屏幕方向发生改变(QScreenOrientationChangeEvent)
QEvent::Paint12需要屏幕更新(QPaintEvent)
QEvent::PaletteChange39部件的调色板发生改变
QEvent::ParentAboutToChange131部件的 parent 将要更改
QEvent::ParentChange21部件的 parent 发生改变
QEvent::PlatformPanel212请求一个特定于平台的面板
QEvent::PlatformSurface217原生平台表面已创建或即将被销毁(QPlatformSurfaceEvent)
QEvent::Polish75部件被抛光
QEvent::PolishRequest74部件应该被抛光
QEvent::QueryWhatsThis123如果部件有“What’s This?”帮助,应该接受事件
QEvent::ReadOnlyChange106部件的 read-only 状态发生改变
QEvent::RequestSoftwareInputPanel199部件想要打开软件输入面板(SIP)
QEvent::Resize14部件的大小发生改变(QResizeEvent)
QEvent::ScrollPrepare204对象需要填充它的几何信息(QScrollPrepareEvent)
QEvent::Scroll205对象需要滚动到提供的位置(QScrollEvent)
QEvent::Shortcut117快捷键处理(QShortcutEvent)
QEvent::ShortcutOverride51按下按键,用于覆盖快捷键(QKeyEvent)
QEvent::Show17部件显示在屏幕上(QShowEvent)
QEvent::ShowToParent26子部件被显示
QEvent::SockAct50Socket 激活,用于实现 QSocketNotifier
QEvent::StateMachineSignal192信号被传递到状态机(QStateMachine::SignalEvent)
QEvent::StateMachineWrapped193事件是一个包装器,用于包含另一个事件(QStateMachine::WrappedEvent)
QEvent::StatusTip112状态提示请求(QStatusTipEvent)
QEvent::StyleChange100部件的样式发生改变
QEvent::TabletMove87Wacom 写字板移动(QTabletEvent)
QEvent::TabletPress92Wacom 写字板按下(QTabletEvent)
QEvent::TabletRelease93Wacom 写字板释放(QTabletEvent)
QEvent::OkRequest94Ok 按钮在装饰前被按下,仅支持 Windows CE
QEvent::TabletEnterProximity171Wacom 写字板进入接近事件(QTabletEvent),发送到 QApplication
QEvent::TabletLeaveProximity172Wacom 写字板离开接近事件(QTabletEvent),发送到 QApplication
QEvent::ThreadChange22对象被移动到另一个线程。这是发送到此对象的最后一个事件在上一个线程中,参见:QObject::moveToThread()
QEvent::Timer1定时器事件(QTimerEvent)
QEvent::ToolBarChange120工具栏按钮在 OS X 上进行切换
QEvent::ToolTip110一个 tooltip 请求(QHelpEvent)
QEvent::ToolTipChange184部件的 tooltip 发生改变
QEvent::TouchBegin194触摸屏或轨迹板事件序列的开始(QTouchEvent)
QEvent::TouchCancel209取消触摸事件序列(QTouchEvent)
QEvent::TouchEnd196触摸事件序列结束(QTouchEvent)
QEvent::TouchUpdate195触摸屏事件(QTouchEvent)
QEvent::UngrabKeyboard189Item 失去键盘抓取(QGraphicsItem)
QEvent::UngrabMouse187Item 失去鼠标抓取(QGraphicsItem、QQuickItem)
QEvent::UpdateLater78部件应该排队在以后重新绘制
QEvent::UpdateRequest77部件应该被重绘
QEvent::WhatsThis111部件应该显示“What’s This”帮助(QHelpEvent)
QEvent::WhatsThisClicked118部件的“What’s This”帮助链接被点击
QEvent::Wheel31鼠标滚轮滚动(QWheelEvent)
QEvent::WinEventAct132发生了 Windows 特定的激活事件
QEvent::WindowActivate24窗口已激活
QEvent::WindowBlocked103窗口被模态对话框阻塞
QEvent::WindowDeactivate25窗户被停用
QEvent::WindowIconChange34窗口的图标发生改变
QEvent::WindowStateChange105窗口的状态(最小化、最大化或全屏)发生改变(QWindowStateChangeEvent)
QEvent::WindowTitleChange33窗口的标题发生改变
QEvent::WindowUnblocked104一个模态对话框退出后,窗口将不被阻塞
QEvent::WinIdChange203本地窗口的系统标识符发生改变
QEvent::ZOrderChange126部件的 z 值发生了改变,该事件不会发送给顶层窗口

用户事件的值应该介于 QEvent:: 和 QEvent::MaxUser之间。

常量描述
QEvent::User1000用户定义的事件
QEvent::MaxUser65535最后的用户事件 ID

为方便起见,可以使用 [static] int QEvent::registerEventType(int *hint* = -1) 函数来注册和存储一个自定义事件类型,这样做会避免意外地重用一个自定义事件类型。

信号与事件的区别

事件(QEvent)信号(SIGNAL)
与QObject的关系由具体对象进行处理由具体对象主动产生
对程序影响改写事件处理函数可能导致程序行为发生改变信号是否存在对应的槽函数不会改变程序行为
两者的联系一般而言,信号在具体的事件处理函数中产生

信号和事件是两个不同层面的东西,发出者不同,作用不同。Qt中,所有的QObject的子类实例均可对事件接收和处理!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring boot Rabbit高级教程

消息可靠性 生产者重试机制 首先第一种情况&#xff0c;就是生产者发送消息时&#xff0c;出现了网络故障&#xff0c;导致与MQ的连接中断。 为了解决这个问题&#xff0c;SpringAMQP提供的消息发送时的重试机制。即&#xff1a;当RabbitTemplate与MQ连接超时后&#xff0c;…

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测&#xff0c;运行环境Matlab2021b及以…

Marin说PCB之BGA焊盘削焊盘带来的焊接问题和解决办法

每周日上午10点钟都是小编最开心的时间了&#xff0c;这个点是斗破苍穹播出的时间。小编我从萧炎从这个动漫开播到现在都追了好多年了&#xff0c;强烈推荐喜欢这个小说的可以看这个动漫&#xff0c;拍的还不错&#xff0c;只是萧炎的配音不再是张沛老师了&#xff0c;有点可惜…

Python实验三

1&#xff1a;编程统计英文句子中的单词出现的次数。 要求&#xff1a;输出结果为按照单词在句子中出现的次数降序排列。 提示&#xff1a;用split&#xff08;&#xff09;拆分字符串 # 1&#xff1a;编程统计英文句子中的单词出现的次数。 # 要求&#xff1a;输出结果为按照…

Java 继承与实现

一、继承&#xff08;extends&#xff09; 1.1 继承概念 继承是面向对象的基本特征&#xff0c;它允许子类继承父类的特征和行为&#xff0c;以提高代码的复用率和维护性等。下面一张图生动地展示了继承和类之间的关系&#xff1a; 继承图 上图中&#xff0c;“动物”、“食草…

【Vue面试题二十一】、Vue中的过滤器了解吗?过滤器的应用场景有哪些?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;Vue中的过滤器了解吗&am…

成为数据分析师要具备什么能力——功法篇(上)

这篇文章适合做了一段时间数据分析工作&#xff0c;开始思考怎么继续提升自己的分析师、运营或者是实习了一段时间的同学&#xff0c;这时的你也许会想几个问题&#xff1a; 为什么我做出来的分析总觉得没有别人的那么高级&#xff1f; 老板为什么总说我的分析“太浅了”&#…

spyder切换conda环境(成功测试)

今天第一次把这个anaconda中配套的spyder的切换环境尝试成功了&#xff0c;特地记录一下 首先明确一点我使用的最新的anaconda的版本是 spyder已经是版本5了&#xff0c;之前的4版本总是出现各种错误 Step1 切换python interpreter 环境是可以直接识别的&#xff0c;不需要…

2023-2024-1 for循环-1(15-38)

7-15 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意&#xff1a;闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份&#xff0c;即每个年…

华为端到端战略管理体系(DSTE开发战略到执行)的运作日历图/逻辑图及DSTE三大子流程介绍

华为端到端战略管理体系&#xff08;DSTE开发战略到执行&#xff09;的运作日历图/逻辑图及DSTE三大子流程介绍 本文作者 | 谢宁&#xff0c;《华为战略管理法&#xff1a;DSTE实战体系》、《智慧研发管理》作者 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#…

【VASP】KPOINTS文件介绍

【VASP】KPOINTS文件介绍 一、KPOINTS 的两种结构第一种结构&#xff1a;&#xff08;非对称&#xff09;第二种结构&#xff1a;&#xff08;高对称&#xff09; 二、关于KPOINTS设置的一些经验三、KPOINTS的选取 前言 一、4个常用的输入文件INCAR、POSCAR、POTCAR、KPOINTS I…

MySQL [基础]] 学习笔记

MySQL 学习 文章目录 MySQL 学习1. 数据库三层结构2. 数据在数据库中的存储方式3. SQL 语句分类3.1 备份恢复数据库的表 4. Mysql 常用数据类型(列类型)4.1 数值型(整数)的基本使用4.2 数值型(bit)的使用4.3 数值型(小数)的基本使用4.4 字符串的基本使用(面试题)4.5 字符串使用…

基于springboot实现心灵治愈心理健康平台系统项目【项目源码+论文说明】

基于springboot实现心灵心理健康平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

Linux友人帐之编译器gcc/g++的使用

一、程序的翻译过程 在C语言中&#xff0c;我们已经学过程序的编译和链接&#xff0c;在这里将复习一下我们之前所学的内容并引出后续gcc/g的内容。 1.1程序的翻译过程 预处理&#xff08;头文件展开&#xff0c;去注释&#xff0c;宏替换&#xff0c;条件编译&#xff09;编…

解决:由于找不到 VCRUNTIME140_.dll,无法继续执行代码。重新安装程序可能会解决此问题

最近我在安装一个软件时&#xff0c;遇到过这样的问题“由于找不到 VCRUNTIME140 1.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题”。 要解决这个问题&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 重新安装程序&#xff1a; 尝试重新安装使用…

Java NIO模型(提供代码示例)

目录 一、NIO特点介绍二、NIO代码实现2.1、客户端代码2.2、服务端代码 一、NIO特点介绍 NIO全称 java non-blocking IO。从JDK 1.4开始&#xff0c;java提供了一些列改进的输入/输出&#xff08;I/O&#xff09;的新特性&#xff0c;被称为NIO&#xff0c;是同步非阻塞的&…

蓝桥杯 常用STL (C++) 未完待续

动态数组 有些时候想开一个数组&#xff0c;但是却不知道应该开多大长度的数组合适&#xff0c;因为我们需要用到的数组可能会根据情况变动。 这时候我们就需要用到动态数组。所谓动态数组&#xff0c;也就是不定长数组&#xff0c;数组的长度是可以根据我们的需要动态改变的。…

Python数据类型转换

举例&#xff1a;使用Python实现超市的收银系统 name input(‘请输入您要购买商品名称&#xff1a;’) id input(‘请输入您要购买商品编号&#xff1a;’) price input(‘请输入您要购买的商品价格&#xff1a;’) print(f’您购买了{name}&#xff0c;商品编号为{id}&am…

《Deep Residual Learning for Image Recognition》阅读笔记

论文标题 《Deep Residual Learning for Image Recognition》 撑起CV界半边天的论文Residual &#xff1a;主要思想&#xff0c;残差。 作者 何恺明&#xff0c;超级大佬。微软亚研院属实是人才辈出的地方。 初读 摘要 提问题&#xff1a; 更深层次的神经网络更难训练。 …

关于unaipp生成的vue3项目开启微信云函数所遇到的问题

使用uniapp创建的vue3项目&#xff0c;需要用到H5静态页面跳转小程序的时候&#xff08;具体操作看微信开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html&#xff09;&#xff0c;会用到微信开发者工…