我有一个类MainWindow,它具有指向Canvas的指针,mCanvas ...
mainwindow.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构造函数内的MainWindow.cpp中,我将mCanvas指向Canvas(this)。然后,我尝试使用 Action Canvas::doSomething()创建一个新的QShortcut。
MainWindow.cpp ...
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
new QShortcut(QKeySequence(Qt::Key_BracketLeft),
mCanvas, SLOT(doSomething()) );
但是,当我尝试运行该程序时,收到doSomething()的错误NO MATCHING FUNCTION CALL,这意味着编译器认为doSomething()不存在。在新的QShortcut中,我将mCanvas编写为mCanvas,* mCanvas和&mCanvas;。什么都行不通。
怎么了?
最佳答案
要在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++ - C++,QT。 QShortcut的函数调用不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829545/