C++ Qt找不到插槽

C++ Qt找不到插槽,c++,qt,C++,Qt,我有一个基本窗口,其中有一个插槽fileNew()。当我运行我的应用程序时,出现以下错误: QObject::connect:没有这样的插槽QMainWindow::fileNew() 为什么找不到插槽 SdiWindow.h class SdiWindow : public QMainWindow { public: SdiWindow(QWidget * parent = 0); private slots: void fileNew(); private: QTextEdi

我有一个基本窗口,其中有一个插槽
fileNew()
。当我运行我的应用程序时,出现以下错误:

QObject::connect:没有这样的插槽QMainWindow::fileNew()

为什么找不到插槽

SdiWindow.h

class SdiWindow : public QMainWindow
{
public:
  SdiWindow(QWidget * parent = 0);

private slots:
  void fileNew();

private:
  QTextEdit * docWidget;
  QAction * newAction;

  void createActions();
  void createMenus();
};
SdiWindow.cpp

SdiWindow::SdiWindow(QWidget * parent) : QMainWindow(parent)
{
  setAttribute(Qt::WA_DeleteOnClose);
  setWindowTitle( QString("%1[*] - %2").arg("unnamed").arg("SDI") );

  docWidget = new QTextEdit(this);
  setCentralWidget(docWidget);

  connect(
    docWidget->document(), SIGNAL(modificationChanged(bool)),
    this, SLOT(setWindowModified(bool))
  );

  createActions();
  createMenus();
  statusBar()->showMessage("Done");
}

void SdiWindow::createActions()
{
  newAction = new QAction( QIcon(":/images/new.png"), tr("&New"), this );
  newAction->setShortcut( tr("Ctrl+N") );
  newAction->setStatusTip( tr("Create a new document") );
  connect(newAction, SIGNAL(triggered()), this, SLOT(fileNew()));
}

void SdiWindow::createMenus()
{
  QMenu * menu = menuBar()->addMenu( tr("&File") );
  menu->addAction(newAction);
}

void SdiWindow::fileNew()
{
  (new SdiWindow())->show();
}

SdiWindow需要将Q_对象宏作为其第一行

class SdiWindow : public QMainWindow
{
Q_OBJECT
public: ....
您还必须在头文件上使用moc。该工具为信号和槽框架生成所有必需的C++代码。p> 生成的moc代码必须经过编译并为链接器所知。为此,我将生成的文件包含在实现文件中,如下所示

#include SdiWindow.h
#include SdiWindow.moc
drescherjm还建议自己编译


编辑:在这种情况下,您是从QMainWindow继承的,为了将来参考,您的类需要以某种方式从QObject继承,以便能够使用信号/插槽框架。

不一定需要包含.moc。我有moc_classname.cxx。这些都是项目的来源。@drescherjm我在没有包括它的时候遇到了问题。虽然我可能只是在调用moc生成的东西时忘记了这么做…@drescherjm,但我只是试着对它进行注释,结果发现链接器出现错误。我相信你的moc代码只需要被编译,这样它就可以被链接到。无论这是在您的实现文件中还是单独的。我试图指出,您的方法不是唯一的方法。根据moc的调用方式,有几种工作方式。