如何访问槽函数中定义的对象并为之连接信号与槽

alan00000 2012-08-10 10:10:12

我在按钮1的槽函数中定义了一个按钮2,那么我该如何获取按钮2的信号并连接到槽呢?
对于按钮1可以这样写:connect(按钮1,SIGNAL(clicked()),this,...)
那么对于按钮2呢?不能直接在connect中写按钮2吧,那该怎么表示它呢?

...全文
275 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiebin133 2012-08-10
  • 打赏
  • 举报
回复
在类中定义两个

QPushButton *m_button[2];

在构造函数中

m_button[0] = new QPushButton(this);
connect(m_button[0], SIGNAL(clicked()), this, SLOT(slot_button0_clicked()));
m_button[1] = NULL;

在槽函数中

if(NULL == m_button[1])
{
m_button[1] = new QPushButton(this);
connect(m_button[1], SIGNAL(clicked()), this, SLOT(slot_button1_clicked()));
}

不知道你是不是这个意思。

alan00000 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
可以啊~

如果:

C/C++ code

class A:public QObject
{
Q_Object

QPushButton * a;
myClass * b;

A();
}
// 假设b中有slot函数: mySlot();
A::A(){
a = new QPushButton();
b =……
[/Quote]

你好,可能我的提问并不是很清晰,按你的代码来说吧,我的意思是b跟a并非并列,b是在按键a的槽函数中定义的一个控件,我想捕捉b发射的信号或者为b连接槽函数,该如何实现?
alan00000 2012-08-10
  • 打赏
  • 举报
回复
你好,可能我的提问并不是很清晰,按你的代码来说吧,我的意思是b跟a并非并列,b是在按键a的槽函数中定义的一个控件,我想捕捉b发射的信号或者为b连接槽函数,该如何实现?
neicole 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
可以啊~

如果:

class A:public QObject
{
Q_Object

QPushButton * a;
myClass * b;

A();
}
// 假设b中有slot函数: mySlot();
A::A(){
a = new QPushButton();
b = new myClass();
connect(a,SIGNAL(clicked()),b, mySlot();
}

[/Quote]
不好意思,有点小错误。。。
connect(a,SIGNAL(clicked()),b, SLOT(mySlot()));
这样才是。。
neicole 2012-08-10
  • 打赏
  • 举报
回复
可以啊~

如果:
class A:public QObject
{
Q_Object

QPushButton * a;
myClass * b;

A();
}
// 假设b中有slot函数: mySlot();
A::A(){
a = new QPushButton();
b = new myClass();
connect(a,SIGNAL(clicked()),b, mySlot();
}


alan00000 2012-08-10
  • 打赏
  • 举报
回复
谢谢两位,在两位的回帖中我得到了提示,问题已经解决,非常感谢!
xiebin133 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 8 楼 的回复:
你这段代码能运行?


纠结,少了个*号,QPushButton b = new QPushButton(); 能运行啊。



引用 9 楼 的回复:
前边说的两个按钮只是为了简单举得例子,实际上我想让在新弹出窗口中显示的多个QComboBox控件显示的条目标号一致,如果其中一个发生改变,其他的也跟着改变,这就需要用到信号与槽,同时我也想实现这里面的sa……
[/Quote]
那么请问,你的b怎么delete?
neicole 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
你这段代码能运行?
[/Quote]

纠结,少了个*号,QPushButton b = new QPushButton(); 能运行啊。


[Quote=引用 9 楼 的回复:]
前边说的两个按钮只是为了简单举得例子,实际上我想让在新弹出窗口中显示的多个QComboBox控件显示的条目标号一致,如果其中一个发生改变,其他的也跟着改变,这就需要用到信号与槽,同时我也想实现这里面的save_exit_Button的功能,也是信号与槽,但是怎么指向他们呢,该如何实现[/Quote]

楼主,这里跟我表述的意思好像是一样哦~
alan00000 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
在类中定义两个

C/C++ code


QPushButton *m_button[2];


在构造函数中

C/C++ code


m_button[0] = new QPushButton(this);
connect(m_button[0], SIGNAL(clicked()), this, SLOT(slot_button0_clicked()));
……
[/Quote]



我把代码贴出来吧,语言叙述能力有点差

ui文件中有个名为button_showhp的按键控件
头文件中声明的类:
class Controlplan : public QWidget
{
Q_OBJECT

public:
explicit Controlplan(QWidget *parent = 0);
~Controlplan();

public slots:
void on_button_showhp_clicked();

private:
……
};

cpp文件中相关代码:
void Controlplan::on_button_showhp_clicked()
{
……

//新建弹出窗口,并在其中显示东西
QDialog *holidayplan=new QDialog(this);
QComboBox *holidaynumbox=new QComboBox();
QComboBox *startmonbox=new QComboBox();
QPushButton *save_exit_Button=new QPushButton("save&exit");
……
holidayplan->show();
}

前边说的两个按钮只是为了简单举得例子,实际上我想让在新弹出窗口中显示的多个QComboBox控件显示的条目标号一致,如果其中一个发生改变,其他的也跟着改变,这就需要用到信号与槽,同时我也想实现这里面的save_exit_Button的功能,也是信号与槽,但是怎么指向他们呢,该如何实现
xiebin133 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 7 楼 的回复:
这样的话就可以达到响应a的槽,并发送b的信号的目的了。然后再connect一个b信号对应的槽就可以了。


我把代码贴出来吧,语言叙述能力有点差

ui文件中有个名为button_showhp的按键控件
头文件中声明的类:
class Controlplan : public QWidget
{
Q_OBJECT

public:
expl……
[/Quote]
你为什么一定要再槽函数中去new呢,你可以一开始就new出来,然后隐藏,槽函数中只要做一个show的操作不就好了,而且,你直接在槽函数里面去new对象,你用完之后如何进行delete呢?这样还要是定义一个类的全局变量,你参考上面我写的吧。
alan00000 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
这样的话就可以达到响应a的槽,并发送b的信号的目的了。然后再connect一个b信号对应的槽就可以了。
[/Quote]

我把代码贴出来吧,语言叙述能力有点差

ui文件中有个名为button_showhp的按键控件
头文件中声明的类:
class Controlplan : public QWidget
{
Q_OBJECT

public:
explicit Controlplan(QWidget *parent = 0);
~Controlplan();

public slots:
void on_button_showhp_clicked();

private:
……
};

cpp文件中相关代码:
void Controlplan::on_button_showhp_clicked()
{
……

//新建弹出窗口,并在其中显示东西
QDialog *holidayplan=new QDialog(this);
QComboBox *holidaynumbox=new QComboBox();
QComboBox *startmonbox=new QComboBox();
QPushButton *save_exit_Button=new QPushButton("save&exit");
……
holidayplan->show();
}

前边说的两个按钮只是为了简单举得例子,实际上我想让在新弹出窗口中显示的多个QComboBox控件显示的条目标号一致,如果其中一个发生改变,其他的也跟着改变,这就需要用到信号与槽,同时我也想实现这里面的save_exit_Button的功能,也是信号与槽,但是怎么指向他们呢,该如何实现
xiebin133 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 3 楼 的回复:
你好,可能我的提问并不是很清晰,按你的代码来说吧,我的意思是b跟a并非并列,b是在按键a的槽函数中定义的一个控件,我想捕捉b发射的信号或者为b连接槽函数,该如何实现?


楼上的意思跟我定滴好像是一样滴。

楼主的意思是这样么?

C/C++ code
class A:pubic QObject
{
Q_Object
QPushButton ……
[/Quote]
你这段代码能运行?
neicole 2012-08-10
  • 打赏
  • 举报
回复
这样的话就可以达到响应a的槽,并发送b的信号的目的了。然后再connect一个b信号对应的槽就可以了。
neicole 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你好,可能我的提问并不是很清晰,按你的代码来说吧,我的意思是b跟a并非并列,b是在按键a的槽函数中定义的一个控件,我想捕捉b发射的信号或者为b连接槽函数,该如何实现?
[/Quote]

楼上的意思跟我定滴好像是一样滴。

楼主的意思是这样么?
class A:pubic QObject
{
Q_Object
QPushButton * a;

signals:
void mySignals();
public slots:
bSlot(){
emit mySignals();
}
aSlot(){
QPushButton b = new QPushButton();
connect(a, SIGNAL(clicked()), b, SLOT(mySlot()));
}
}

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧