C++,QT。 QShortcut 的函数调用不存在
C++, QT. Function call for QShortcut does not exist
我有一个 class,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.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;没有任何效果。
出了什么问题?
要在 Canvas 中使用信号和槽,您需要从 QObject
继承它(在您的情况下是从 QWidget
继承)并使用 Q_OBJECT
宏。此外,您的 mCanvas 在 new QShortcut ...
.
中使用之前未初始化
或者做这样的事情:
auto shortcut = new QShortcut(QKeySequence(Qt::Key_BracketLeft), this);
QObject::connect(shortcut, &QShortcut::activated, this, [ this ] { mCanvas->doSomething(); } );
我有一个 class,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.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;没有任何效果。
出了什么问题?
要在 Canvas 中使用信号和槽,您需要从 QObject
继承它(在您的情况下是从 QWidget
继承)并使用 Q_OBJECT
宏。此外,您的 mCanvas 在 new QShortcut ...
.
或者做这样的事情:
auto shortcut = new QShortcut(QKeySequence(Qt::Key_BracketLeft), this);
QObject::connect(shortcut, &QShortcut::activated, this, [ this ] { mCanvas->doSomething(); } );