Tôi gặp vấn đề với các lớp enum, QVariants và lớp QSettings. Có các giá trị lớp enum mà tôi muốn lưu trữ trong một QVariant mà đi vào một cá thể QSettings. Vì vậy, mã của tôi thực sự trông giống như sau:lớp enum trong QVariant trong QSettings
enum class Foo
{
Bar1, Bar2
}
Q_ENUMS(Foo)
Q_DECLARE_METATYPE(Foo)
...
Foo value = Bar2;
QSettings settings;
settings.setValue(QString("Foo"), QVariant::fromValue(value));
Tại thời điểm này trong việc thực hiện các mã, một sự khẳng định nhảy vào và phàn nàn:
ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp
Tìm kiếm trên internet, tôi phát hiện ra rằng lớp là thiếu phụ kiện < < và >> toán tử. Nhưng đó không phải là một lựa chọn cho các lớp enum. Tôi thậm chí đã cố gắng sử dụng
qRegisterMetaType<Foo>("Foo");
nhưng không hiệu quả. Có lẽ bạn có một số gợi ý/giải pháp khác cho tôi. Cảm ơn!
Bạn nói đúng, đây là vấn đề với enums trong QVariants. Triển khai ban đầu của tôi đã lưu các giá trị số nguyên thực (không dấu) trong QVariant. Bây giờ tôi đã thử enums scoped, nhưng tôi chạy vào vấn đề này với QVariants. Tuy nhiên, tôi đã chuyển về triển khai ban đầu với mẹo của bạn có giá trị thấp nhất/cao nhất trong enum. Cảm ơn. – CppChris