我希望从QtConcurrent函数更新一个进度条小部件,但遇到以下问题:
a)如果我将此功能声明为:
void myRunFunction(QString str)
然后,我成功地通过以下方法将其编程为并发:
QFuture<void> t1 = QtConcurrent::run(myRunFunction, QString("A"));
但是我不能从函数内部访问GUI的任何Qt小部件(“无法解析标识符'widget'”)。
b)如果我宣布这一职能为:
void mainForm::myRunFunction(QString str)
然后,我成功地访问了它内部的小部件,但不能再将其编程为并发,从而得到编译器错误:
error: invalid use of non-static member function ‘void mainForm::myRunFunction(QString)’
在行:
QFuture<void> t1 = QtConcurrent::run(myRunFunction, QString("A"));
我怎样才能解决问题呢? 多谢你,马可
我建议使用闭包(带有捕获的lambda)。 但是要小心你的对象的寿命。
还要使用异步信号/插槽连接在线程之间通信-Qt::QueuedConnection。 最好不要直接调用小部件,而是调用提供必要数据的特定插槽,这样就可以对它们执行任何您想要的操作。
// mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow() {};
private:
void function_slot(int data) {
// update widget
}
signals:
void function_signal(int data);
};
和。cpp文件中的某个位置:
// declare a lambda
auto f = [this] (QString str)
{
for (int i = 0; i < 100; ++i) {
// do some job
// ...
// job is done
// send progress data to mainwidget
emit function_signal(i);
}
};
// queued thread-safe connection
connect(this, &MainWindow::function_signal, this, &MainWindow::function_slot, Qt::QueuedConnection);
auto t1 = QtConcurrent::run(f, "string");
我正在尝试访问存储在AWS3桶中的文本文件。目前,它只包含“测试”一词。 起初,我以为我的fs.readfile有问题,但现在我发现问题更根本。我根本无法访问该文件。node.js的AWS似乎根本无法看到该文件。 我正在使用以下Lambda函数: 测试床函数包含以下代码: 结果如下所示(我删除了时间戳和请求ID文本): 由此,我得出结论,没有调用S3函数,尽管我可能弄错了。 我做错了什么?
问题内容: 我想知道如何访问另一个函数中的一个函数。我看到了这样的代码: 那么,还有另一种方法来调用该 函数吗?我的第二个问题是,为什么在最后一行中我不打电话? 很好的解释深表感谢。 问题答案: 不,您不能直接调用它,因为它是的局部变量。 您需要使用,因为调用时返回了函数对象。要执行此功能对象,您需要 在这里您可以直接调用它,因为您可以访问它,因为它是由函数返回的。返回的对象实际上称为 闭包, 因
问题内容: 我想知道什么? 如果释放具有ID:button_b(Get_Boys类)的按钮,则必须更改具有ID:label_g(Get_Girls类)的Label。 如果按下ID为:button_b的Button(Get_Boys类),则ID为root_lbl的Label(Get_People类)必须更改。 如果发布了ID为:root_btn(Get_People类)的Button,则ID为:la
我在Kotlin编程,我有日期类的扩展功能。 它在< code>onCreate中工作正常,但是在< code >异步任务中的< code>doInBackground中出现错误 我里面有这些线 < code > getCurrentDateTime()返回< code>Date类的实例,并且为< code>toString()中的参数给出了错误 也可以参数为公共开放的乐趣toString():字
问题内容: 我有以下数组,当我做得到: 我试图按如下方式访问数组: 但这显示了我: 未定义0 注意: 我从 Facebook SDK 4 获得此数组,所以我不知道原始的数组结构。 作为示例,如何访问数组中的值? 问题答案: 要访问或您如何使用两个不同的运算符。 数组 要访问数组元素,您必须使用,或者您不会看到太多,但也可以使用is 。 声明数组和访问数组元素之间的区别 定义数组和访问数组元素是两件
我有一个组件反应本机: 最后一行是将在新位置调用的回调方法。 通过该方法,我无法访问或 如何从回调函数更新状态?
我想在构造函数中访问多个位置的状态值。当我在构造函数中输入console.log(this)时,我可以看到可以访问特定的值,但是当我输入console.log this.state时,我没有定义。 这就是我想象的工作方式(我想访问CSSValue中的状态): 但是,当我运行此代码: 然后我在控制台中得到这个: 但是当我将console.logconsole.log(this.state)它打印未定
我一直不明白为什么我们能够从其他类调用一个类的构造函数。构造函数是一种方法,通常当试图从类中调用方法时,我们必须要么使该方法静态,这样我们就可以以 但是在构造函数的情况下,我们两者都不做。Java如何调用类的构造函数而不执行这些方法中的任何一个?我知道一个类的构造函数必须对你调用它的类可见,也就是说,如果你调用的类构造函数在不同的包中,你必须导入那个包。 那么,Java如何处理调用构造函数,而不必