【问题标题】:Qt Mainwindow menu signalsQt 主窗口菜单信号
【发布时间】:2011-11-24 08:15:01
【问题描述】:

我有处理 QMainWindow 的“核心”对象。
Core.h 代码

class Core : public QObject
{
    Q_OBJECT
public:
    explicit Core(QObject *parent = 0);
    ~Core();
    void appInit();
    int getAuth();

public slots:
    void appExit();

private slots:
    void appMenuTriggered(QAction *action);

private:
    void preInit();
    MainWindow *mwnd;
};

Core.cpp 代码

Core::Core(QObject *parent) : QObject(parent)
{
    qDebug() << "Core::Constructor called";
    preInit();
}

Core::~Core()
{
    delete mwnd;
    qDebug() << "Core::Destructor called";
}

int Core::getAuth()
{
    LoginDialog *login = new LoginDialog();
    int r = login->exec();
    delete login;
    return r;
}

void Core::appExit() // connected to qapplication aboutToQuit
{
    qDebug() << "Core::appExit called";
}

void Core::preInit()  // called after getAuth im main.cpp
{
    qDebug() << "Core::preInit called";
}

void Core::appMenuTriggered( QAction *action )
{
    qDebug() << "action triggered";
}

void Core::appInit()
{
    mwnd = new MainWindow();
    mwnd->show();
    qDebug() << "Core::appInit called";
}

我正在尝试将主窗口菜单栏信号连接到核心插槽,如下所示:

connect(mwnd->menuBar(), SIGNAL(triggered()), this, SLOT(appMenuTriggered()));

但它不起作用。我是 C++ 和 Qt 的新手。这个怎么连接? 或者也许有更好的方法来处理其他程序部分的主窗口操作。

UPD 问题解决了。忘记包含 QMenuBar

【问题讨论】:

  • 如果您已经解决了您的问题,您应该将其作为答案发布并接受。这样会更多地造福他人

标签: qt connect signals-slots slot


【解决方案1】:

您必须在 SIGNAL 和 SLOT 参数中提供完整的函数规范(但没有参数名称)。像这样:

connect(mwnd->menuBar(),
        SIGNAL(triggered(QAction*)),
        this,
        SLOT(appMenuTriggered(QAction*)));

如果您在 Qt Creator 中调试此类代码,connect 函数将在找不到信号或插槽时将诊断错误消息写入“应用程序输出”窗格。我建议您在解决问题之前找到这些错误消息,以便您知道将来在哪里查找。信号槽很容易出错!

【讨论】:

  • +1 用于提及诊断错误消息。这些真的很有用。我想很多人会忽略阅读它们。
  • 我在 QT 中收到以下错误:no matching function for call to 'Core::connect(QMenuBar*, const char*, Core* const, const char*)' candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
  • 看起来您正在从声明为 const 的成员函数中调用 connect(查看错误消息中的 Core* const)。对吗?
猜你喜欢
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多