标题:新人求教一个关于信号和槽的问题
作者:gy19920615
日期:2017-12-25 15:01
内容:
我想问的主题是 如何用信号和槽把变量显示到界面上。
我写的线程函数里面对读取的数据进行了处理,并显示到界面上,之前用指针调用UI 控件的方法会崩溃(主线程才能调用UI 界面),现在用信号和槽的方法处理,可是新人实在太笨拙,不知道信号和槽怎么处理这种情况,我是这么写的:
头文件在类MainWindow 里声明了信号 signal:voidvalueChanged(double);
声明了槽 private slots:void setValueol(double);
在线程函数里声明了变量c,存储电压值,连接信号和槽:
c=(float)(256*data[1]+data[0]-512)*1.5/1000;
connect(c,SIGNAL(valueChanged(doubele))),this,SLOT(setValueVol(double))); (疑问:c可以作为object1吗? Object2可以写this 吗?信号是如何触发槽的~)
槽函数:void MainWindow::setValueVol (double c)
{
QString tempStr;
ui->TextBrowser ->setText(temp.setNum(c));
}
以上,代码肯定是不能编译通过的,但是我不太懂信号和槽,看了很多资料没有讲解我这种情况的,多半的信号是按钮类型的,请问变量发生改变可以作为信号吗,怎么处理
#1 [zxwmail 12-25 15:59]
直接赋值不行么?不是更简单
ui->TextBrowser ->setText(temp.setNum(c));
#2 [gy19920615 12-25 16:07]
这个线程函数是静态函数,不能赋值的
#3 [yanwuyue 12-26 20:27]
object是类class,c是double,肯定不能这么创建,
setText就是槽函数
思路1:直接使用使用信号发射QMetaObject::invokeMethod
QMetaObject::invokeMethod(通过MainWindow指针 获取TextBrowser指针,"setText",Q_ARG(QString ,tempStr));
思路2:通过MainWindow中转信号,
MainWindow中创建信号valueChanged,如
connect(this,SIGNAL(valueChanged(doubele))),ui->TextBrowser ,SLOT(setValueVol(double)));
使用时emit (MainWindow指针)->valueChanged(tempStr);
#4 回 yanwuyue 的帖子 [gy19920615 12-29 15:01]
yanwuyue:object是类class,c是double,肯定不能这么创建,
setText就是槽函数
思路1:直接使用使用信号发射QMetaObject::invokeMethod
QMetaObject::invokeMethod(通过MainWindow指针 获取TextBrowser指针,"setText",Q_ARG(QString ,tempStr));
思路2:通过MainWindow中转信号,
..... .. (2017-12-26 20:27)
emit (MainWindow *)UserData->valueChanged(c1);编译不通过,UserData是LPVOID类型的
#5 [yanwuyue 12-29 18:22]
UserData是什么你问我,代码都没一段,编译错误信息也没有,我哪知道你写的什么鬼,你在搞笑吗