我正在做,auto data = combobox->currentData().value<QPair>();但编译器抱怨:
[ 48%] Building CXX object src/CMakeFiles/mudlet.dir/dlgProfilePreferences.cpp.o\n/home/vadi/Programs/Mudlet/mudlet/src/dlgProfilePreferences.cpp: In lambda function:\n/home/vadi/Programs/Mudlet/mudlet/src/dlgProfilePreferences.cpp:420:81: error: no matching function for call to \xe2\x80\x98QVariant::value()\xe2\x80\x99\n auto data = script_preview_combobox->currentData().value<QPair>();\n ^\nIn file included from /home/vadi/Programs/Qt/5.9/gcc_64/include/QtCore/QVariant:1:0,\n from /home/vadi/Programs/Mudlet/mudlet/cmake-build-debug/src/ui_profile_preferences.h:12,\n from /home/vadi/Programs/Mudlet/mudlet/src/dlgProfilePreferences.h:27,\n from /home/vadi/Programs/Mudlet/mudlet/src/dlgProfilePreferences.cpp:25:\n/home/vadi/Programs/Qt/5.9/gcc_64/include/QtCore/qvariant.h:351:14: note: candidate: template<class T> T QVariant::value() const\n inline T value() const\n ^\n/home/vadi/Programs/Qt/5.9/gcc_64/include/QtCore/qvariant.h:351:14: note: template argument deduction/substitution failed:\nsrc/CMakeFiles/mudlet.dir/build.make:806: recipe for target 'src/CMakeFiles/mudlet.dir/dlgProfilePreferences.cpp.o' failed\nRun Code Online (Sandbox Code Playgroud)\n\n据我所知,我的电话与template<class T> T QVariant::value()- 出了什么问题?
QPair 是一个模板类,用于从变体获取值的代码并未完全描述该类型。
首先,您需要知道您的 QPair 描述的是哪两种类型。然后,您必须使用以下代码来提取它(将 QString 和 int 更改为您的pairs数据类型):
auto pair = combobox->currentData().value<QPair<QString, int> >();
Run Code Online (Sandbox Code Playgroud)