当前位置: 首页 > article >正文

Qt控件中函数指针使用的最终版本,使用std::function

代码:

class MyWidget : public QWidget 
{
public:
	std::function<void(QResizeEvent* event)> pf_resizeEvent = 0;
protected:
	inline void resizeEvent(QResizeEvent* event) override {
		if (pf_resizeEvent != 0)
			pf_resizeEvent(event);
	}
};


int main(int argc, char* argv[])
{
	QApplication a(argc, argv);  //注意,这里是QApplication	 
	ga.setStdLocaleForUTF8();

	MyWidget w;
	QTextEdit txt("Hello Qt" ,&w);
	w.pf_resizeEvent = [&txt](QResizeEvent* event) {
		txt.resize(event->size());
		std::cout << "txt大小随窗体大小改变。\n";
	};
	w.show();
	return a.exec();
}

运行结果:

关键定义:

以下是其它一些事件定义:

    std::function<void(QMouseEvent* event)> pf_mousePressEvent = 0;
    std::function<void(QMouseEvent* event)> pf_mouseReleaseEvent = 0;
    std::function<void(QMouseEvent* event)> pf_mouseDoubleClickEvent = 0;
    std::function<void(QMouseEvent* event)> pf_mouseMoveEvent = 0;
    std::function<void(QMouseEvent* event)> pf_wheelEvent = 0;
    std::function<void(QKeyEvent* event)> pf_keyPressEvent = 0;
    std::function<void(QKeyEvent* event)> pf_keyReleaseEvent = 0;
    std::function<void(QFocusEvent* event)> pf_focusInEvent = 0;
    std::function<void(QFocusEvent* event)> pf_focusOutEvent = 0;
    std::function<void(QEvent* event)> pf_leaveEvent = 0;
    std::function<void(QResizeEvent* event)> pf_resizeEvent = 0;
    std::function<void(QMoveEvent* event)> pf_moveEvent = 0;
    std::function<void(QCloseEvent* event)> pf_closeEvent = 0;

结论,很方便,甚至都不用Qt的信号与槽机制。


http://www.kler.cn/a/567459.html

相关文章:

  • JAVA笔记【一】
  • 自然语言处理NLP入门 -- 第七节预训练语言模型
  • 解决Docker Desktop启动后Docker Engine stopped问题
  • 【QGIS二次开发】
  • 9、HTTP/2与HTTP/1.1的区别?【高频】
  • Mysql100道高频面试题
  • BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab
  • Phpstudy中的MySQL无法正常启动或启动后自动暂停,以及sqlilab环境搭建出现的问题解决方法
  • Word 插入图片会到文字底下解决方案
  • 紧致性准则(Compactness Criterion)与维数灾难(Curse of Dimensionality)——模式识别中对特征的要求
  • Express + MongoDB 实现文件上传
  • grok3设计一个自动驾驶VLM模型
  • 第十四站:生成对抗网络(GAN)
  • 基于SpringBoot的美妆购物网站系统设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • Spark 介绍
  • final 关键字在不同上下文中的用法及其名称
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file
  • 性能测试监控工具jmeter+grafana
  • ave-form.vue 组件中 如何将产品名称发送给后端 ?
  • Unity插件-Mirror使用方法(二)组件介绍