如何用QT实现多个按钮信号响应不同的槽函数
1个回答
推荐于2016-11-16
展开全部
你的意思是子窗口中的一个按钮被点击了,父窗口上的一个slot函数响应这个点击吧?
很简单的:
1)在子窗口里面增加一个signal,在父窗口里面增加一个响应slot用于接收这个信号。
2)子窗口的按钮slot函数中emit这个signal。
3)在父窗口中把子窗口的这个signal连到自己的响应slot。
// 子窗口
class ChildWindow : public QWidget
{
Q_OBJECT
public:
ChildWindow(QWidget* p = 0)
:QWidget(p)
{
QVBoxLayout* l = new QVBoxLayout(this);
QPushButton* btn = new QPushButton("btn", this);
l->addWidget(btn);
connect(btn, SIGNAL(clicked()), SLOT(ClickedBtn());
}
signals:
// 这个信号是发给父窗口的。
void ChildWindowEvent();
protected slots:
// 点击子窗口中按钮的slot
void ClickedBtn()
{
// 触发子窗口的信号给父窗口接收。
emit ChildWindowEvent();
}
}
// 父窗口
class ParentWindow : public QWidget
{
Q_OBJECT
public:
ParentWindow(QWidget* p = 0)
:QWidget(p)
{
QVBoxLayout* l = new QVBoxLayout(this);
w = new ChildWindow(this);
l->addWidget(w);
// 把子窗口的信号连接到父窗口来。
connect(w, SIGNAL(ChildWindowEvent()), SLOT(ChildWindowEventSlot());
}
protected:
ChildWindow* w;
protected slots:
// 父窗口用于接收子窗口信号的slot。
void ChildWindowEventSlot()
{
//子窗口的按钮被点击了。
}
}
很简单的:
1)在子窗口里面增加一个signal,在父窗口里面增加一个响应slot用于接收这个信号。
2)子窗口的按钮slot函数中emit这个signal。
3)在父窗口中把子窗口的这个signal连到自己的响应slot。
// 子窗口
class ChildWindow : public QWidget
{
Q_OBJECT
public:
ChildWindow(QWidget* p = 0)
:QWidget(p)
{
QVBoxLayout* l = new QVBoxLayout(this);
QPushButton* btn = new QPushButton("btn", this);
l->addWidget(btn);
connect(btn, SIGNAL(clicked()), SLOT(ClickedBtn());
}
signals:
// 这个信号是发给父窗口的。
void ChildWindowEvent();
protected slots:
// 点击子窗口中按钮的slot
void ClickedBtn()
{
// 触发子窗口的信号给父窗口接收。
emit ChildWindowEvent();
}
}
// 父窗口
class ParentWindow : public QWidget
{
Q_OBJECT
public:
ParentWindow(QWidget* p = 0)
:QWidget(p)
{
QVBoxLayout* l = new QVBoxLayout(this);
w = new ChildWindow(this);
l->addWidget(w);
// 把子窗口的信号连接到父窗口来。
connect(w, SIGNAL(ChildWindowEvent()), SLOT(ChildWindowEventSlot());
}
protected:
ChildWindow* w;
protected slots:
// 父窗口用于接收子窗口信号的slot。
void ChildWindowEventSlot()
{
//子窗口的按钮被点击了。
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询