c++ - C++,QT。 QShortcut的函数调用不存在

标签 c++ qt pointers forward-declaration

我有一个类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/

相关文章:

c++ - Boost gil 从 rgb8_view_t 获取缓冲区

c++ - 当一个类的所有实例都被销毁时释放内存

pointers - 从 Rust FFI 中检索一个 float 指针

部分特化时基于 C++ 模板的 "override"等效?

c++ - 使用句柄从外部修改 Windows GUI 对象

c++ - -> 之后带有类型别名的推导指南

qt - 取消所有未完成的 QTimer 事件

linux - 项目错误QT

qt - QLabel 自动换行模式

c - 使用 struct tm 打印特定日期和 strftime