dde-control-center
Deepin Control Center
载入中...
搜索中...
未找到
widgetmodule.h
1//SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
2//
3//SPDX-License-Identifier: GPL-3.0-or-later
4#ifndef WIDGETMODULE_H
5#define WIDGETMODULE_H
6#include "interface/moduleobject.h"
7
8class QWidget;
9
10template<typename T>
11class WidgetModule : public DCC_NAMESPACE::ModuleObject
12{
13public:
14 template<class classT>
15 WidgetModule(const QString &name, const QString &displayName, classT *receiver, void (classT::*callback)(T *), QObject *parent = nullptr)
16 : DCC_NAMESPACE::ModuleObject(name, displayName, parent)
17 {
18 connect(receiver, callback);
19 }
20 template<typename FunT>
21 WidgetModule(const QString &name, const QString &displayName, FunT callback, QObject *parent = nullptr)
22 : DCC_NAMESPACE::ModuleObject(name, displayName, parent)
23 {
24 auto fun = [](QWidget *w, FunT callback) {
25 T *tWidget = static_cast<T *>(w);
26 (callback)(tWidget);
27 };
28 m_callback = std::bind(fun, std::placeholders::_1, callback);
29 }
30 WidgetModule(const QString &name = QString(), const QString &displayName = QString(), QObject *parent = nullptr)
31 : DCC_NAMESPACE::ModuleObject(name, displayName, parent)
32 , m_callback(nullptr)
33 {
34 }
35 template<class classT>
36 void connect(classT *receiver, void (classT::*callback)(T *))
37 {
38 auto fun = [](QWidget *w, classT *receiver, void (classT::*callback)(T *)) {
39 T *tWidget = static_cast<T *>(w);
40 (receiver->*callback)(tWidget);
41 };
42 m_callback = std::bind(fun, std::placeholders::_1, receiver, callback);
43 }
44
45 virtual QWidget *page() override
46 {
47 QWidget *widget = new T();
48 if (m_callback)
49 m_callback(widget);
50 return widget;
51 }
52
53private:
54 std::function<void(QWidget *)> m_callback;
55};
56
57#endif // WIDGETMODULE_H
Definition widgetmodule.h:12
virtual QWidget * page() override
每次被调均需new新的QWidget
Definition widgetmodule.h:45