首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++,QT.QShortcut的函数调用不存在

C++,QT.QShortcut的函数调用不存在
EN

Stack Overflow用户
提问于 2017-08-23 10:08:06
回答 1查看 120关注 0票数 1

我有一个类,带有指向画布的指针的MainWindow,mCanvas...

mainwindow.h...

代码语言:javascript
复制
#include "canvas.h"


class MainWindow : public QMainWindow
{
Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);

//snip

private:
    Canvas* mCanvas;
};

canvas.h...

代码语言:javascript
复制
class MainWindow;


class Canvas
{
public:
    Canvas(MainWindow* parent);

    //snip

public slots:
    void doSomething();

private:
    MainWindow* mParent;  
};  

Canvas.cpp...

代码语言:javascript
复制
Canvas::Canvas(MainWindow* parent)
{
    mParent = parent;
}   

void Canvas::doSomething()
{
    //snip
}

在MainWindow.cpp中,在MainWindow构造函数中,我将mCanvas指向一个画布(This)。然后,我尝试使用操作Canvas::doSomething()创建一个新的QShortcut。

MainWindow.cpp...

代码语言:javascript
复制
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {

    new QShortcut(QKeySequence(Qt::Key_BracketLeft),
              mCanvas, SLOT(doSomething()) );

但是,当我尝试运行该程序时,收到错误消息doSomething()没有匹配的函数调用,这意味着编译器认为doSomething()不存在。在新的QShortcut中,我将mCanvas写为mCanvas,*mCanvas,&mCanvas;都不起作用。

哪里出了问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-23 14:23:51

要在Canvas中使用信号和插槽,您需要从QObject (在本例中是从QWidget )继承它,并使用Q_OBJECT宏。此外,在new QShortcut ...中使用之前,您的mCanvas没有初始化。

或者这样做:

代码语言:javascript
复制
auto shortcut = new QShortcut(QKeySequence(Qt::Key_BracketLeft), this);
QObject::connect(shortcut, &QShortcut::activated, this, [ this ] { mCanvas->doSomething(); } );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45829545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档