c++ - 如何使 std::variant<..> 可用于 QVariant?

标签 c++ qt qt5

我想使用 std::variant<Foo, Bar>作为 QVariant 的内部值.如何做到这一点?

#include <QCoreApplication>
#include <QMetaType>
#include <variant>

enum Foo{A, B};
enum class Bar{C, D};

Q_DECLARE_METATYPE(std::variant<Foo, Bar>);


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    return a.exec();
}

我收到这个错误:

error: macro "Q_DECLARE_METATYPE" passed 2 arguments, but takes just 1
 Q_DECLARE_METATYPE(std::variant<Foo, Bar>);
                                          ^

最佳答案

问题是 Q_DECLARE_METATYPE 是一个宏,而宏不喜欢 ,

你可以传递一个类型别名

using T = std::variant<Foo, Bar>; 
Q_DECLARE_METATYPE(T)

或将使用包裹在额外的 ()

Q_DECLARE_METATYPE((std::variant<Foo, Bar>));

关于c++ - 如何使 std::variant<..> 可用于 QVariant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59030593/

相关文章:

c++ - 没有显示的 Qt 5.1 QApplication - QXcbConnection : Could not connect to display

c++ - 在 for 循环中使用数组 - C++

c++ - 如何在 C++ 中读取复杂的文本文件?

c++ - std::vector::reserve( unknown m ),我知道 m<<N (通常)并且知道 N

c++ - 我怎样才能在qt中获得当前关注的QLineEdit?

c++ - 在 QML 中使 QList<QObject*> C++ 模型动态化

c++ - 使用 Qt 从 stdin 异步读取

c++ - 如何打印 Qt :HANDLE on linux? (Qt5)

qt - 从QWebEngineView或QWebEnginePage删除ScrollBar

c++ - 使用 dumpbin 查看 .dll 或 .lib 文件的源代码