QAbstractListModel'de özel sınıfları kullanmaya çalışıyorum ve Q_DECLARE_METATYPE hiç çalışmıyor!Q_DECLARE_METATYPE hiç çalışmıyor
#include <QMetaType>
#include <QVariant>
#include <QDebug>
typedef int x;
Q_DECLARE_METATYPE(x)
void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}
ve çıkış hala yanlıştır:
sorunun nerede olduğunu test etmek için, aşağıdaki gibi kod basitleştirdik!
btw ben uygulamak istediğiniz kod gibidir:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);
ve böyle QAbstractListModel :: verileri yeniden uygulamaya çalıştığınızda:
QList<ns::s> list; //this is actually a member field of the custom model.
QVariant MyListModel::data(const QModelIndex& index, int role) const {
Q_UNUSED(role)
return list.at(index.row());
}
derleyici bildirir ve hata gibi:
cannot convert const ns::a to QVariant::Type
evet: http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#Q_DECLARE_METATYPE söyleniyor
, burada Q_DECLARE_METATYPE çalışma gösteren oldukça basit bir örnek: ng bir varsayılan kurucu, bir kopya kurucu ve ortak bir yıkıcı sahip olmalıdır Q_DECLARE_METATYPE geçirilen Sorun şu. Sorun şu ki, "MyModel :: data (const QModelIndex & index, int role) const" uygulandığında, 'Myclass'ı döndürmek yerine' QVariant :: fromValue (MyClass) 'i döndürmeliydim. – user2826776
[Qt özel türü doc] okuma (http://doc.qt.io/qt-5/custom-types.html), makroyu nasıl kullanacağından emin değildim. 'Q_DECLARE_METATYPE (MyClass);' sınıfının kendi içinde yer aldığında, derleme, 'isim-dışı alan sınıfındaki MyClass’'daki açık uzmanlık hatasıyla başarısız olur. Örnek, makroyu yerleştirmek için doğru konumu gösterir. Teşekkürler! – fgiraldeau