linux 信号如何传递两个参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 信号如何传递两个参数相关的知识,希望对你有一定的参考价值。

每次信号都只能带着第四个参数的数据传递过去,如果我是处理两个参数,(比如我要点击一个按钮,将两个文本框的数字相加,输入到第三个文本框),请问我如果将这两个数据传递过去,谢谢。

是C++么,我提供个想法,你把两个文本框的数据都定义成类的私有成员,然后定一个按钮的槽函数的时候,每次点击就读取两个文本框中的内容,然后相加后传给一个临时变量,将这个临时变量在第三个框中显示就行。你看看。或者定一个结构体,将两个参数合成一个结构体 参考技术A 自己做个编码,两个参数一起发过去,接收方再解码就行啦

qt 两个界面 参数传递

mainwindow.h文件:
#include "dialog.h"
private:
Ui::MainWindow *ui;
Dialog dlg;

mainwindow.cpp文件:
void MainWindow::on_pushButton_clicked()

dlg.show();//dlg是做的一个数字键盘,这里可以实现把他调出来
//ui->lineEdit->setText(sss);


下面问题来了,我在dialog.cpp中
void Dialog::on_okbtn_clicked()

sss=s1;//这里我设了一个extern QString sss, 把最后在键盘上输入的值传给sss.
this.hide();//隐藏键盘

然后我需要在mainwindow的lineedit显示这个值,这里要怎么处理,怎么让这个值在我一把键盘隐藏掉之后就在mainwindow的lineedit里面显示出来,求大神
我那个程序值是传过去的,就是在mainwindow里面我点击一下按键,跳出键盘界面,在键盘界面点击OK返回到主界面,都正常,值也传过去了,就是存在sss这个全局变量中,那么在mainwindow里面现在sss这值怎么显示,如果我再搞个按键按下显示sss是可以的,但是我想在键盘隐藏的同时,在主界面的lineedit里面同时显示这个值

可以建立信号和槽的连接啊 也可以写个接口

信号和槽

在dialog里写个信号 在mainwindow写个槽 连接就可以

还有可以写个接口
写个函数 返回你要的值 直接接受也可以啊追问

新手啊,求具体点,比如:
dialog.h
signals: void sendstr()
是这样写个信号?
那这个信号要怎么发出?难道在dialog.cpp中
void Dialog::on_okbtn_clicked()

sendstr();//发送信号?
this.hide();//隐藏键盘
这样发出信号?
void Dialog::sendstr()//信号函数就这样?

后面在评论里写

追答

发送信号用emit...

void Dialog::on_okbtn_clicked()

emit sendstr();//发送信号 书里都有讲的吧...
this.hide();//隐藏键盘 //这里 this是指针 应该用->

追问

void Dialog::on_okbtn_clicked()

this->hide();
emit sendstr(sss);
这个我查了网上知道了
但是maninwindow里面的connect怎么连接
connect(Dialog,SIGNAL(sendstr(QString)),this,SLOT(setlineedit()));这样不行啊
你有推荐书看看吗?

追答

应该可以的 你的信号定义好象没有QString参数 书的话 Qt creator 快速入门 入门的书籍 介绍了一些Qt的功能 但是内容很浅显 纯粹是为了初学者写的 c++ gui Qt4 也不错的入门书籍 介绍的就相对较深

这两本看完之后 我还是感觉看看Qt自带的例子 就是最好的教程了 毕竟现在qt5 的书籍很少 Qt自带的例子很全面 哪里不会就看帮助文档

追问

dialog.h 我定义的
signals:
void sendstr(QString);
然后mainwindow里面连接就是不行啊
dialog这个我是在mainwindow.h里定义的
private:
Ui::MainWindow *ui;
Dialog dlg; 然后dlg->show dlg->hide 都行的
不知道是不是这样的

追答

按下OK


再按0 mainWindow 显示0 是这个意思吗?

追问

是的,我主界面按了pushbutton弹出键盘,我在键盘按OK主界面就显示我输入的值

追答

只是简单实现了一下你要求的信号和槽  可以去看一看

参考技术A MainWindow 里加入slots:setTextLineEdit() 方法负责将值显示在lineEdit上.
MianWindow下加入信号槽.
connect(dialog,SIGNAL(hide()),this,setTextLineEdit());追问

你这是想当然的吧,我就是这么搞的,不行,连不起来

追答

你可以这样做。
在dialog里面自己加一个signal 方法声明。
然后在你按钮里emit一个自己的信号。
将MainWindow的处理函数和这个信号连接。

以上是关于linux 信号如何传递两个参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将信号作为函数参数传递?

linux 如何kill指定参数的命令?

QT编程中信号与槽遇到的参数传递问题,如下

如何在 Linux 上传递带有感叹号的参数?

Qt信号槽如何附带自定义参数

QT中UI主窗口如何与子线程相互传递参数