首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMetaObject::invokeMethod:没有这样的方法: QTextCursor::MoveOperation,QTextCursor::MoveMode

QMetaObject::invokeMethod:没有这样的方法: QTextCursor::MoveOperation,QTextCursor::MoveMode
EN

Stack Overflow用户
提问于 2017-05-09 14:20:33
回答 1查看 1.5K关注 0票数 0

在c++中的一个2线程QT程序中使用以下代码时,我会得到这个运行时错误(程序一直在运行):

代码语言:javascript
复制
QMetaObject::invokeMethod: no such method QTextCursor::MoveOperation,QTextCursor::MoveMode

守则:

代码语言:javascript
复制
QMetaObject::invokeMethod(textEdit, "moveCursor", Qt::QueuedConnection,
        Q_ARG(QTextCursor::MoveOperation, QTextCursor::End),
        Q_ARG(QTextCursor::MoveMode, QTextCursor::MoveAnchor));

(textEdit是QTextEdit对象)。

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 14:28:09

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

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

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

代码语言:javascript
复制
// 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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43872372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档