Qt 如何使用connect with member函数

Qt 如何使用connect with member函数,qt,signals,Qt,Signals,我想用一个成员函数连接tabBarDoubleClicked信号,但编译器一直对我咆哮: /home/ron/src/kterminal/sessionstack.cpp:79:56: error: invalid use of non-static member function this, SessionStack::editTabLabel(session->id()));

我想用一个成员函数连接tabBarDoubleClicked信号,但编译器一直对我咆哮:

/home/ron/src/kterminal/sessionstack.cpp:79:56: error: invalid use of non-static member function
         this, SessionStack::editTabLabel(session->id()));
                                                        ^
我不确定如何修复它,我的代码如下所示:

int SessionStack::addSession(Session::SessionType type)
{
    Session* session = new Session(type, this);
    connect(session, SIGNAL(titleChanged(int,QString)), this, SIGNAL(titleChanged(int,QString)));
    connect(session, SIGNAL(terminalManuallyActivated(Terminal*)), this, SLOT(handleManualTerminalActivation(Terminal*)));
    connect(session, SIGNAL(activityDetected(Terminal*)), m_window, SLOT(handleTerminalActivity(Terminal*)));
    connect(session, SIGNAL(silenceDetected(Terminal*)), m_window, SLOT(handleTerminalSilence(Terminal*)));
    connect(session, SIGNAL(destroyed(int)), this, SLOT(cleanup(int)));

    m_sessions.insert(session->id(), session);

    QString tab_label = QString("Shell (") + QString::number(session->id(), 16) + ")";
    addTab(session->widget(), tr(qPrintable(tab_label)));

    emit sessionAdded(session->id());

    raiseSession(session->id());

    connect(this, tabBarDoubleClicked,
        this, SessionStack::editTabLabel(session->id()));

    return session->id();   
}

void SessionStack::editTabLabel(int tabIndex)
{
双击选项卡时如何调用editTabLabel

编辑1

在我的标题中,我声明了以下内容: 类SessionStack:publicqtabwidget { Q_对象 Q_ClassInfo-Bus接口,org.kde.kterminal

public:
    explicit SessionStack(QWidget* parent, QWidget* window);
    ~SessionStack();

private slots:
    void tabBarDoubleClicked(int index);
    void editTabLabel(int tabIndex);
})

发生此错误的原因是您刚刚忘记在下面的位置添加信号宏和插槽宏 connectthis,tabBarDoubleClicked,this,SessionStack::editablabelsession->id

连接时不能传递会话->id,只能在发出信号时传递参数

请注意,您的代码在运行时无论如何都不会连接,因为该信号遗漏了一个参数int,因此它与EditTable插槽匹配。所以你也需要解决这个问题。。应该是

connect(this, SINGAL(tabBarDoubleClicked(int), this, SLOT(editTabLabel(int)));

如果信号TabBAdBulcEclipse是内置的,您不能更改它来添加参数,那么您可以考虑QSignalMapper


您的意思是以session->id作为参数调用editablabel吗?还是应该使用tabBarDoubleClicked信号中的int来调用它?在SessionStack类中,您是否声明了信号tabBarDoubleClicked?或者你的意思是使用信号吗?你不能像SLOTeditTabLabelsession->id那样将参数传递给插槽!刚刚修正了我的答案。。谢谢你的评论。@Mike