我有一个类,带有指向画布的指针的MainWindow,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指向一个画布(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()) );但是,当我尝试运行该程序时,收到错误消息doSomething()没有匹配的函数调用,这意味着编译器认为doSomething()不存在。在新的QShortcut中,我将mCanvas写为mCanvas,*mCanvas,&mCanvas;都不起作用。
哪里出了问题?
发布于 2017-08-23 14:23:51
要在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(); } );https://stackoverflow.com/questions/45829545
复制相似问题