gpt4 book ai didi

c++ - QMetaObject::invokeMethod: 没有这样的方法 QTextCursor::MoveOperation,QTextCursor::MoveMode

转载 作者:行者123 更新时间:2023-11-28 01:48:38 30 4
gpt4 key购买 nike

在 C++ 的 2 线程 QT 程序中使用以下代码时,我收到此运行时错误(尽管程序继续运行):

QMetaObject::invokeMethod: no such method QTextCursor::MoveOperation,QTextCursor::MoveMode

代码:

QMetaObject::invokeMethod(textEdit, "moveCursor", Qt::QueuedConnection,
Q_ARG(QTextCursor::MoveOperation, QTextCursor::End),
Q_ARG(QTextCursor::MoveMode, QTextCursor::MoveAnchor));

(textEdit 是一个 QTextEdit 对象)。

我知道只能调用可调用的函数/槽。即使查看 QT 的源代码,我也无法确定此函数是否不可调用。我究竟做错了什么?如果此方法确实不可调用,是否有任何其他方法可以将光标从另一个线程移动到末尾?

谢谢。

最佳答案

QTextEdit::moveCursor() 既不是插槽也未标记为可调用。但是只有标有Q_INVOKABLE的槽和函数可以使用QMetaObject::invokeMethod()调用。

要么在目标线程的对象中实现自己的槽。或者使用延迟为 0 的 QTimer::singleShot(),它有一个重载,它接受一个函数指针并与非槽函数一起工作。

附带说明一下,查看 Qt 源代码以查找槽或可调用函数非常容易,因为它可以直接在函数声明中看到。以下是一些示例:

// a() is a normal function
public:
void a();

// b(), c() and d() are slots
public slots:
void b();

public Q_SLOTS:
void c();

public:
Q_SLOT void d();

// e() is invokable
public:
Q_INVOKABLE void e();

关于c++ - QMetaObject::invokeMethod: 没有这样的方法 QTextCursor::MoveOperation,QTextCursor::MoveMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872372/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com