C++,QT。 QShortcut 的函数调用不存在
Posted
技术标签:
【中文标题】C++,QT。 QShortcut 的函数调用不存在【英文标题】:C++, QT. Function call for QShortcut does not exist 【发布时间】:2017-08-23 02:08:05 【问题描述】:我有一个类,MainWindow,它带有指向 Canvas 的指针,mCanvas...
主窗口.h...
#include "canvas.h"
class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
//snip
private:
Canvas* mCanvas;
;
canvas.h...
class MainWindow;
class Canvas
public:
Canvas(MainWindow* parent);
//snip
public slots:
void doSomething();
private:
MainWindow* mParent;
;
Canvas.cpp...
Canvas::Canvas(MainWindow* parent)
mParent = parent;
void Canvas::doSomething()
//snip
在 MainWindow.cpp 的 MainWindow 构造函数中,我将 mCanvas 指向一个 Canvas(this)。然后我尝试使用操作 Canvas::doSomething() 创建一个新的 QShortcut。
MainWindow.cpp...
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
new QShortcut(QKeySequence(Qt::Key_BracketLeft),
mCanvas, SLOT(doSomething()) );
但是,当我尝试运行程序时,我收到错误 NO MATCHING FUNCTION CALL for doSomething(),这意味着编译器认为 doSomething() 不存在。在新的 QShortcut 中,我将 mCanvas 写为 mCanvas、*mCanvas、&mCanvas;没有任何效果。
出了什么问题?
【问题讨论】:
【参考方案1】:要在 Canvas 中使用信号和插槽,您需要从 QObject
(在您的情况下是从 QWidget
)继承它并使用 Q_OBJECT
宏。在new QShortcut ...
中使用之前,您的 mCanvas 也未初始化。
或者做这样的事情:
auto shortcut = new QShortcut(QKeySequence(Qt::Key_BracketLeft), this);
QObject::connect(shortcut, &QShortcut::activated, this, [ this ] mCanvas->doSomething(); );
【讨论】:
以上是关于C++,QT。 QShortcut 的函数调用不存在的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QT/python 从 Javascript 调用 C++ 函数?
从 C++ 中的多个线程调用 Qt 中小部件类的信号函数是不是安全?