作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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/
在 C++ 的 2 线程 QT 程序中使用以下代码时,我收到此运行时错误(尽管程序继续运行): QMetaObject::invokeMethod: no such method QTextCurso
我是一名优秀的程序员,十分优秀!