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

发布于:2025-03-02 ⋅ 阅读:(22) ⋅ 点赞:(0)

代码:

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


网站公告

今日签到

点亮在社区的每一天
去签到