【问题标题】:How can I call a method from QMainWindow?如何从 QMainWindow 调用方法?
【发布时间】:2018-02-06 03:06:56
【问题描述】:

我确实需要从我的 MainWindow 类中调用一个方法,该方法从 MainWindow 外部的类中继承自 QMainWindow 类,如下所示:

Q_ASSERT(QMetaObject::invokeMethod(mainWindow, "attachmentDownloadComplete"));

mainWindow 属于 MainWindow : public QMainWindow

错误是:

no matching function for call to 'QMetaObject::invokeMethod(MainWindow*&, const char [27])'
     Q_ASSERT(QMetaObject::invokeMethod(mainWindow, "attachmentDownloadComplete"));

我的问题是如何设法调用调用此方法?

【问题讨论】:

  • 您确定将attachmentDownloadComplete 声明为信号还是槽?
  • 是的,它被声明为槽。
  • 你能说明你是如何声明它的吗?
  • 什么是NAMEOF
  • 不相关,但不应将函数调用放在 Q_ASSERT 宏中,因为在发布版本中将跳过整个调用。

标签: qt c++11 windows-10 qt5 moc


【解决方案1】:

问题是,您尝试调用的插槽有一个输入参数。

当您有输入参数时,您需要使用Q_ARG. 指定参数

例如:

在我的主窗口中,我有一个插槽,如下所示。

public slots:

    void doSomeTest(const char* name) { std::cout << "testing Something"; }

在其他文件中调用它时,应该如下所述。 经过测试并按预期工作。

QMetaObject::invokeMethod(mainWin, "doSomeTest", Q_ARG(const char*, "test test"));

第一个参数 - 你的主窗口对象。

第二个参数 - 插槽名称。

从第三个开始,您的所有输入参数都带有类型。

如果您有任何返回类型,请使用

Q_RETURN_ARG(RETURN_TYPE, RETURN_VALUE_PARAMETER),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2019-06-24
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多