c++ - 将 QtConcurrent 用于 QImage::fill 时 Unresolved 重载函数类型

标签 c++ qt

我正在尝试调用QImage::fill()异步使用 QtConcurrent模块。 invert pixels example工作正常,但填充方法的类似语法不能:

#include <QApplication>
#include <QImage>
#include <QFuture>
#include <QtConcurrent/QtConcurrentRun>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QImage image(1920, 1080, QImage::Format_ARGB32_Premultiplied);
  QFuture<void> future = QtConcurrent::run(&image, &QImage::fill, Qt::transparent); // ko
  //QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba); // ok
  future.waitForFinished();
  return app.exec();
}


编译失败并出现以下错误:
error: no matching function for call to ‘run(QImage*, <unresolved overloaded function type>, Qt::GlobalColor)’
   10 |   QFuture<void> future = QtConcurrent::run(&img, &QImage::fill, Qt::transparent); // ko
      |                                                                                ^
In file included from /usr/include/x86_64-linux-gnu/qt5/QtConcurrent/QtConcurrentRun:1,
                 from /home/romain/code/qt/main.cc:4:
/usr/include/x86_64-linux-gnu/qt5/QtConcurrent/qtconcurrentrun.h:72:12: note: candidate: ‘template<class T> QFuture<T> QtConcurrent::run(T (*)())’
   72 | QFuture<T> run(T (*functionPointer)())
      |            ^~~
/usr/include/x86_64-linux-gnu/qt5/QtConcurrent/qtconcurrentrun.h:72:12: note:   template argument deduction/substitution failed:
/home/romain/code/qt/main.cc:10:80: note:   mismatched types ‘T()’ and ‘QImage’
   10 |   QFuture<void> future = QtConcurrent::run(&img, &QImage::fill, Qt::transparent); // ko
      |                                                                                ^

是否可以通过显式标记某些模板类型来帮助编译器?

最佳答案

问题是 QImage::fill有多个重载。您需要使用 static_cast 来消除歧义。 ...

QFuture<void> future = QtConcurrent::run(&image, static_cast<void(QImage::*)(Qt::GlobalColor)>(&QImage::fill), Qt::transparent);

或(因为这是 Qt ) QOverload ...
QFuture<void> future = QtConcurrent::run(&image, qOverload<Qt::GlobalColor>(&QImage::fill), Qt::transparent);

关于c++ - 将 QtConcurrent 用于 QImage::fill 时 Unresolved 重载函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60560623/

相关文章:

c++ - 为什么我使用getline时cout打印了两次?

c++ - 将 shared_ptr 分配给数组的偏移量

带有 omniORB 库的 PHP 扩展 CORBA 客户端给出运行时错误 "undefined symbol "

c++ - Qt和声音处理

qt - 正确重新加载 QQmlApplicationEngine

c++ - 我可以在调整大小时锁定 MFC 对话框的宽度或高度吗?

c++ - C/C++ 中的减法和与无符号整数的比较定义明确吗?

c++ - 更新 Qlabel 文档矩形调用的标签不是文本标签。为什么?

python - 当模型是 pandas dataframe 时使 QTableView 可编辑

c++ - 从 C++ 访问 QML WebView