• 9134阅读
  • 13回复

qt窗口之间传值的问题 [复制链接]

上一主题 下一主题
离线destiny
 
只看楼主 倒序阅读 楼主  发表于: 2010-01-19
写了一个窗口A,运行时候会调用窗口B,窗口B可以输入一些文字,希望点击窗口B的“确认”按键,能把之前输入的文字返回到A。
其实有个大体思路,全局变量啊,信号之类的,可是小声QT知识浅薄,查了一天的资料还是不是到应该怎么写代码。
离线yangfanxing
只看该作者 1楼 发表于: 2010-01-19
可在A窗口调用B。
B中设公有变量xb,
向A中变量xa传递值:A->xa = B->xb;
所有的非初始化类的变量都可以这样传递的。
不知道这个说得有用不。。。
PHPWind好恶心。。。不想看这种界面。。。
离线destiny
只看该作者 2楼 发表于: 2010-01-19
引用第1楼yangfanxing于2010-01-19 22:52发表的  :
可在A窗口调用B。
B中设公有变量xb,
向A中变量xa传递值:A->xa = B->xb;
所有的非初始化类的变量都可以这样传递的。
不知道这个说得有用不。。。


恩恩,请问怎么使用父窗口的指针,子窗口的构造函数里面有个QWidget *parent貌似是指向父窗口的
有大侠说应该强制转换成父窗口类型,然后操作,我的代码如下:
QMainWindow* preWindow = (QMainWindow*)parent;
preWindow->date =  ui.date->text();

父窗口是QMainWindow类型的,其中date是一个public的属性。

运行后报错: “date”: 不是“QMainWindow”的成员

杯具。。。
离线benbenmajia

只看该作者 3楼 发表于: 2010-01-20
说是这样,在构造函数中指明也就行了,除非是你要把子类的类型转换为父类中的某个类型,不然我觉得没必要,用子类的构造函数进行实例化就可以了
安然.....
离线午小夜

只看该作者 4楼 发表于: 2010-01-20
我。。。無語。
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线destiny
只看该作者 5楼 发表于: 2010-01-20
引用第3楼benbenmajia于2010-01-20 09:06发表的  :
说是这样,在构造函数中指明也就行了,除非是你要把子类的类型转换为父类中的某个类型,不然我觉得没必要,用子类的构造函数进行实例化就可以了


如何才能往父窗口传值?
离线destiny
只看该作者 6楼 发表于: 2010-01-20
引用第4楼午小夜于2010-01-20 09:22发表的  :
我。。。無語。


新手,难免会有一些很幼稚的问题,让您见笑了
还是希望您能指点一下迷津,如何往父窗口里面传值。
离线john123
只看该作者 7楼 发表于: 2010-01-20
A產生B,要讓B去改變A的內容

譬如
A產生B,然後把A的QLabel設給B,B就能改變A的QLABEL

大概像下面這樣

A
B= new B;
QLabel lb=new QLabel;
B.set_label(lb);

B
QLabel label=new QLabel;

void B::set_label(QLabel lb)
{
this.label=lb;
}
void B::change_A_label()
{
label.setText("TEST");
}
[ 此帖被john123在2010-01-20 10:21重新编辑 ]
离线john123
只看该作者 8楼 发表于: 2010-01-20
當然也可用信號,寫法應該就是這2種
SIGNAL,SLOT
把B emit , A SLOT

connect B SIGNAL to A SLOT


A
connect(B,SIGNAL(emit_label(QString),this,SLOT(change_label(QString)));

void change_label(QString str)
{
label->setText(str);
}

B

QString str;
str="TEST";
emit emit_label(str);
  
离线destiny
只看该作者 9楼 发表于: 2010-01-20
引用第8楼john123于2010-01-20 10:17发表的  :
當然也可用信號,寫法應該就是這2種
SIGNAL,SLOT
把B emit , A SLOT
connect B SIGNAL to A SLOT
.......


我想使用信号、槽的方式,现在在程序里检测到B能发出一个信号,但是A却没有捕获到,这是什么原因?
离线cspp

只看该作者 10楼 发表于: 2010-01-21
connect B的信号和A的槽了?
离线2nd090215
只看该作者 11楼 发表于: 2010-01-21
关注,
离线yangfanxing
只看该作者 12楼 发表于: 2010-01-21
引用第11楼2nd090215于2010-01-21 19:25发表的  :
关注,

这位老兄只会{关注}。。。
PHPWind好恶心。。。不想看这种界面。。。
离线iamjiex
只看该作者 13楼 发表于: 2010-01-25
可以使用delegate设计模式……(之前搞Objective-C太多了,习惯了)
快速回复
限100 字节
 
上一个 下一个