• 13587阅读
  • 18回复

如何在Diaglog窗体间传值? [复制链接]

上一主题 下一主题
离线usmart
 
只看楼主 正序阅读 楼主  发表于: 2008-11-07
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
我这有两个Diaglog的窗体, 要在窗体间传值, 应该怎么做?
离线sssooonnnggg

只看该作者 18楼 发表于: 2013-01-05
假设类A在函数funcA中要给类B传值,可以这样实现:
----------------A.h----------------------
class A:public QObject
{

.....
signals:
void sendvalue(int);//信号
private:
void funcA();
....

}

----------------B.h-----------------------------
class B:public QObject
{
public slots:
void getValue(int v);
}


--------------------A.cpp----------------------
void A::funcA()
{

B* b = new B;
connect(this, SIGNAL(sendValue(int)), b, SLOT(getValue(int)));
emit sendValue(5);

}
------------------B.cpp-------------------------------
void B::getValue(int v)
{

//A给B传值后将触发这个槽函数(SLOT),V即为A传给B的值
if(5==v)
{

//do something...

}

}
离线小葡萄
只看该作者 17楼 发表于: 2012-12-28
还是有点不懂,我也遇见了这个问题,可以详细的说一下么??本人也是初学者,刚接触qt。。
离线usmart
只看该作者 16楼 发表于: 2008-11-07
谢谢 netlove
离线netlove

只看该作者 15楼 发表于: 2008-11-07
另外,lazybone: 你那个所谓的懒人窝网址是什么?我看过一次,后来忘了,感觉上面有些东西很不错。谢谢
离线netlove

只看该作者 14楼 发表于: 2008-11-07
m_pDlg1 = new Dialog(this);
CHECK_PTR(m_pDlg1);
qWarning("init the Dlg1");

m_pDlg2 = new Dialog(this);
CHECK_PTR(m_pDlg2);
qWarning("init the Dlg2");

connect(m_pDlg1, SIGNAL(sigSetValue(const QString &)), m_pDlg2, SLOT(slotSetValue(const QString &)));
离线lazybone
只看该作者 13楼 发表于: 2008-11-07
学习啦 从没这么用过
离线usmart
只看该作者 12楼 发表于: 2008-11-07
我在Form定义了一个signals: void valueChanged(int);
然后我在QIconView的selectionChanged的槽中发出一个信号: emit valueChanged( i );

然后我在另一个Form1中定义了一个Slots: void slotValue( int );
在Form1头文件中生成一个Form的实例: Form a;
在Form1的构造函数里实现connect(&a,SIGNAL(valueChanged(int)),this,SLOT(slotValue(int)));
Form1::slotValue(int i)
{
    printf("Test\n");  为什么打印不出东西?
}
离线xiachm

只看该作者 11楼 发表于: 2008-11-07
在一个Dialog中定义一个信号,信号可以携带你需要传递的参数,在需要的时候发射这个信号,在另外一个Dialog中定义一个处理这个信号的槽,然后,在Dialog创建的地方进行信号和槽的连接。
离线usmart
只看该作者 10楼 发表于: 2008-11-07
引用第6楼water_wf于2008-11-07 13:43发表的  :
这种办法虽然高效,但是不符合软件设计的封装策略,因为两个dialog类互相引用,并且无法用信号来触发,无法确定取值的时间和有效性
signal/slot就是通信办法,自己设计signal slot的接口,触发即可,signal slot可以传递任何数值的


用Signal/Slot怎么实现啊,因为我是两个不同的Dialog.
离线usmart
只看该作者 9楼 发表于: 2008-11-07
能写个例子吗?
离线netlove

只看该作者 8楼 发表于: 2008-11-07
引用第6楼water_wf于2008-11-07 13:43发表的  :
这种办法虽然高效,但是不符合软件设计的封装策略,因为两个dialog类互相引用,并且无法用信号来触发,无法确定取值的时间和有效性
signal/slot就是通信办法,自己设计signal slot的接口,触发即可,signal slot可以传递任何数值的


正解
离线arthur_liu
只看该作者 7楼 发表于: 2008-11-07
我本来也想用signal/slot方法的,可是还没有研究明白
暂时用全局变量来传递参数的,这也是一种方法啊,可以参考

哪位大侠可以仔细说说不同dialog传递参数的signal/slot的具体用法吗?我认为这种方法比全局变量要好多了

进程间通信应该也可以传递这样的参数的吧
do right, be good!
离线water_wf

只看该作者 6楼 发表于: 2008-11-07
引用第5楼lazybone于2008-11-07 13:22发表的  :
将一个窗口作为 构造参数 传递到 另一个窗口
将要传递的属性改为 public 即可

这种办法虽然高效,但是不符合软件设计的封装策略,因为两个dialog类互相引用,并且无法用信号来触发,无法确定取值的时间和有效性
signal/slot就是通信办法,自己设计signal slot的接口,触发即可,signal slot可以传递任何数值的
离线lazybone
只看该作者 5楼 发表于: 2008-11-07
将一个窗口作为 构造参数 传递到 另一个窗口
将要传递的属性改为 public 即可
离线aid120
只看该作者 4楼 发表于: 2008-11-07
应该看看connect()函数,Qt安装目录下的example里有例子
离线usmart
只看该作者 3楼 发表于: 2008-11-07
Water_wf:
Signal/Slot 可以在窗体间传值吗?怎么实现?能教教吗?谢谢了
离线water_wf

只看该作者 2楼 发表于: 2008-11-07
signal/slot就是一种通信方法啊
离线vrcats
只看该作者 1楼 发表于: 2008-11-07
是说Dialog么?在Dialog子类里加入公有方法,通过参数往里传值
快速回复
限100 字节
 
上一个 下一个