C++ Qt C++;带有模板的自定义QWidget
我正在尝试组合一个自定义QWidget,它应该包含一些模板内部参数,但我不知道如何做,因为Qt不允许我这样做 我的模板类:C++ Qt C++;带有模板的自定义QWidget,c++,qt,templates,qwidget,qt-signals,C++,Qt,Templates,Qwidget,Qt Signals,我正在尝试组合一个自定义QWidget,它应该包含一些模板内部参数,但我不知道如何做,因为Qt不允许我这样做 我的模板类: template<typename T> struct AbstractData { QWidget* displayedItem{}; T* data; }; 模板 结构抽象数据{ QWidget*displayedItem{}; T*数据; }; 现在我要做的是创建一个定制的小部件,比如QScrollArea(类似,不同)。 但是当有人点
template<typename T>
struct AbstractData {
QWidget* displayedItem{};
T* data;
};
模板
结构抽象数据{
QWidget*displayedItem{};
T*数据;
};
现在我要做的是创建一个定制的小部件,比如QScrollArea(类似,不同)。
但是当有人点击一个元素时,我想发出一个信号,其中包含用户提供的数据结构
例如:
template<typename T>
class PlaylistController : public QWidget {
Q_OBJECT
private:
QLayout *m_layout{};
std::vector<AbstractData<T> *> m_vecAbsData{};
std::vector<DelegateItem *> m_items{};
public:
explicit PlaylistController(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
void wheelEvent(QWheelEvent *event) override;
signals:
void clicked(T elem);
public slots:
void loadElements(const std::vector<AbstractData<T> *> &elements);
};
模板
类控制器:公共QWidget{
Q_对象
私人:
QLayout*m_布局{};
但是我不能这样做,因为我不知道我的用户想要使用什么样的数据。有什么解决方法吗
我如何将模板和QWidget结合在一起,从而发出一个数据类型为T的信号,它可以是任何东西
你不能。主运行中心需要一个完全定义的类型。有一个很好的解释
只要不使用模板中的信号或插槽,就可以让模板类从QObject派生。它看起来像这样:
class SomeBase : public QObject
{
Q_OBJECT
...
signals:
void someSignal();
};
template<class T>
class SomeTemplate : SomeBase
{
// Don't use Q_OBJECT macro
// Don't use signals or slots
};
class SomeBase:公共QObject
{
Q_对象
...
信号:
无效信号();
};
模板
类SomeTemplate:SomeBase
{
//不要使用Q_对象宏
//不要使用信号或插槽
};
你可以查看一下MOC生成的代码(AFAIK,这也是C++代码)。也许,你会找到一种方法来手动编写它,而不是依赖于moc。因此,你也可以以某种方式将它模板化。可能没那么容易。仅供参考:最近我在研究编译时计数时,无意中发现了一个“Qt克隆”但是如果没有moc…;-)您可能会使用多态类实现相同的效果。您的数据可以是哪种类型,即您的模板参数可以采用哪种类型?