主页 > 软件开发  > 

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

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的信号与槽机制。

标签:

Qt控件中函数指针使用的最终版本,使用std::function由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Qt控件中函数指针使用的最终版本,使用std::function