QT中怎么实现主窗口和子窗口数据的互相传输,注意是相互的!!!

summer_b 2017-10-23 11:42:44
main.h
signals:
void pushButton_12(QString text);
main.cpp
void MainWindow::on_pushButton_clicked()
{
luying*window=new luying(this);
QObject::connect(this,SIGNAL(pushButton_12(QString)),window, SLOT(showluying(QString)));
window->show();
}
luying.h
private slots:
void showluying(QString text);
void on_pushButton_3_clicked();
luying.cpp
void luying::showluying(QString text)
{
ui->lineEdit->setText(ui->lineEdit->text() + text);
}
void luying::on_pushButton_3_clicked()
{
QString song=ui->lineEdit->text();
int length=song.length();
QString t=song;
for(int i=0;i<=length/2;i++)
{
t[i]=song[i];
song[i]=song[length-1-i];
song[length-1-i]=t[i];
qDebug()<<"song is"<<song[i]<<endl;
ui->lineEdit->setText(song);
}
emit pushButton_3(ui->lineEdit->text());//输不到主窗口
}

问题:主窗口到子窗口是可以的,之后,子窗口到主窗口就不能用了。哪位大神帮我看看
...全文
2462 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
summer_b 2017-10-30
  • 打赏
  • 举报
回复
引用 9 楼 summer_b 的回复:
[quote=引用 7 楼 lgv100 的回复:] http://blog.csdn.net/lywzgzl/article/details/41085385 参考这个链接的吧,我刚好是主窗口向子窗口不行,看了你的明白了。以上链接是子窗口向父窗口传递的。
不用了,可以了,放在MAINWingdow里就可以了,谢谢楼上所有人
summer_b 2017-10-30
  • 打赏
  • 举报
回复
引用 7 楼 lgv100 的回复:
http://blog.csdn.net/lywzgzl/article/details/41085385 参考这个链接的吧,我刚好是主窗口向子窗口不行,看了你的明白了。以上链接是子窗口向父窗口传递的。
我以前子窗口到父窗口就是按照连接上写的,不行,只能单向。那你可以双向了吗,代码可以贴出来看下吗?
summer_b 2017-10-30
  • 打赏
  • 举报
回复
引用 6 楼 caihuisinx 的回复:
luying*window=new luying(this);定义一个对象,需要占用内存,你每次都new出来,内存很快不够用,你要在构造函数里申请 luying *hello = new luying(0); connect(hello,SIGNAL(pushButton_3(QString)), this, SLOT(showluying(QString))); hello.show(); 这个为什么不放在MainWidow的构造函数里?
我刚开始实在mainwindow里的,但是子窗口传不到父窗口
lgv100 2017-10-27
  • 打赏
  • 举报
回复
http://blog.csdn.net/lywzgzl/article/details/41085385 参考这个链接的吧,我刚好是主窗口向子窗口不行,看了你的明白了。以上链接是子窗口向父窗口传递的。
bestman 2017-10-25
  • 打赏
  • 举报
回复
luying*window=new luying(this);定义一个对象,需要占用内存,你每次都new出来,内存很快不够用,你要在构造函数里申请 luying *hello = new luying(0); connect(hello,SIGNAL(pushButton_3(QString)), this, SLOT(showluying(QString))); hello.show(); 这个为什么不放在MainWidow的构造函数里?
习惯就好zz 2017-10-24
  • 打赏
  • 举报
回复
引用 3 楼 summer_b 的回复:
[quote=引用 1 楼 ch122633 的回复:] 你这个connect是从main发送信号到luying。 并没有luying发送信号给luying,子窗口之间当然不能用。 你要写一个connect连接两个子窗口之间的信号和槽,类似main到luying的
luying.h signals: void clicked(QModelIndex); void pushButton_3(QString); private slots: void showluying(QString text); void on_pushButton_3_clicked(); void luying::on_pushButton_3_clicked() { MainWindow *hello = new MainWindow();//连接到main QObject::connect(this,SIGNAL(pushButton_3(QString)),hello, SLOT(showluying(QString)));//连接到main QString song=ui->lineEdit->text(); int length=song.length(); QString t=song; for(int i=0;i<=length/2;i++) { t[i]=song[i]; song[i]=song[length-1-i]; song[length-1-i]=t[i]; qDebug()<<"song is"<<song[i]<<endl; ui->lineEdit->setText(song); } emit pushButton_3(ui->lineEdit->text());//输不到主窗口 } 还是传不过去,大神在帮我看看[/quote] MainWindow *hello = new MainWindow();//连接到main QObject::connect(this,SIGNAL(pushButton_3(QString)),hello, SLOT(showluying(QString)));//连接到main 这里创建的hello不是你要传过去和main界面,你可以在main中创建luying对话框的时候connect。 比如在main中,luying *hello = new luying(); connect(hello,SIGNAL(pushButton_3(QString)), this, SLOT(showluying(QString))); hello.show();
summer_b 2017-10-24
  • 打赏
  • 举报
回复
引用 2 楼 jxbinwd 的回复:
pushButton_3信息定义了吗? 用connect跟主窗口关联了吗? 如果定义和关联了,那加上: ui->lineEdit->clear()试试。 void luying::showluying(QString text) { QSting strText = ui->lineEdit->text(); strText += text; ui->lineEdit->clear(); ui->lineEdit->setText(strText); }
我用MainWindow *hello = new MainWindow();//连接到main QObject::connect(this,SIGNAL(pushButton_3(QString)),hello, SLOT(showluying(QString)));//连接到main 连接到主窗口,在luying.h加了 signals: void clicked(QModelIndex); void pushButton_3(QString); 还是不行
summer_b 2017-10-24
  • 打赏
  • 举报
回复
引用 1 楼 ch122633 的回复:
你这个connect是从main发送信号到luying。 并没有luying发送信号给luying,子窗口之间当然不能用。 你要写一个connect连接两个子窗口之间的信号和槽,类似main到luying的
luying.h signals: void clicked(QModelIndex); void pushButton_3(QString); private slots: void showluying(QString text); void on_pushButton_3_clicked(); void luying::on_pushButton_3_clicked() { MainWindow *hello = new MainWindow();//连接到main QObject::connect(this,SIGNAL(pushButton_3(QString)),hello, SLOT(showluying(QString)));//连接到main QString song=ui->lineEdit->text(); int length=song.length(); QString t=song; for(int i=0;i<=length/2;i++) { t[i]=song[i]; song[i]=song[length-1-i]; song[length-1-i]=t[i]; qDebug()<<"song is"<<song[i]<<endl; ui->lineEdit->setText(song); } emit pushButton_3(ui->lineEdit->text());//输不到主窗口 } 还是传不过去,大神在帮我看看
萧洛 2017-10-23
  • 打赏
  • 举报
回复
pushButton_3信息定义了吗? 用connect跟主窗口关联了吗? 如果定义和关联了,那加上: ui->lineEdit->clear()试试。 void luying::showluying(QString text) { QSting strText = ui->lineEdit->text(); strText += text; ui->lineEdit->clear(); ui->lineEdit->setText(strText); }
习惯就好zz 2017-10-23
  • 打赏
  • 举报
回复
你这个connect是从main发送信号到luying。 并没有luying发送信号给luying,子窗口之间当然不能用。 你要写一个connect连接两个子窗口之间的信号和槽,类似main到luying的

16,235

社区成员

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

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