QT其他类中计算出的结果在ui界面的控件中显示

QT,其他类中计算出的结果如何在ui界面的控件中显示?大体要求是这个样子的,我在一个类中执行了其他类中的一个函数,得到一串数据,那么我怎么将这串数据通过组合在mainwindow中用ui->这种方式将数据赋值给控件呢?


我在网上搜索了好多结果,今天整理一下,和大家分享,网上网友说到,ui->给控件赋值,只能在mainwindow这个类中操作,至于将ui->这个放到别的类中不建议,我这边也没有放到过别的类中,有兴趣的网友可以尝试放到另一个类中看看。


下面开始重点步骤:

r1.png

上面的图是目录结构,有这么多个文件。

r2.png

上面这个图是执行时候的界面,就是点击pushButton,在上面两个框中显示在MyEmit类中发送信号携带的参数。


代码:

mainwindow.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "myemit.h"
 
namespace  Ui {
class  MainWindow;
}
 
class  MainWindow :  public  QMainWindow
{
     Q_OBJECT
 
public :
     explicit  MainWindow(QWidget *parent = 0);
     ~MainWindow();
 
private  slots:
     void  on_pushButton_clicked();
     void  read_emit( int  a, QString b);
 
private :
     Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H

mainwindow.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
 
MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui( new  Ui::MainWindow)
{
     ui->setupUi( this );
}
 
MainWindow::~MainWindow()
{
     delete  ui;
}
 
void  MainWindow::on_pushButton_clicked()
{
     //实例化一个类的对象
     MyEmit myemit;
     //进行信号槽的连接,注意!!!这个connect()函数要先进行信号和槽的绑定,
     //之后才能从实例化的这个类里面发信号到当前的类中。
     connect(&myemit,SIGNAL(start_emit( int ,QString)), this ,SLOT(read_emit( int ,QString)));
     //执行MyEmit类中的函数,进行发送信号操作
     myemit.send_emit();
}
void  MainWindow::read_emit( int  a,QString b)
{
 
     //将发送过来的参数,int型转成QString型,传入控件
     QString aa = QString::number(a, 10);
     ui->lineEdit->setText(aa);
     ui->lineEdit_2->setText(b);
}

注意:MainWindow类这块需要注意一些知识,可能初学者会不太关注,就是connect()连接信号槽这点,上面有注释,大家看一下。

初学者特别容易在这边犯错,上述如果connect()函数和下面一句换了位置,那么槽函数read_emit将不会执行,不信你试试!

在这里,初学者可以理解为,当你实例化一个对象之后,你需要进行设置,怎么设置呢?就是通过connect函数将信号和槽进行绑定,之后一旦接受到这个信号,那么我这边就执行相应的槽函数,如果不先connect的话,先接受到信号,本段程序也不知道要进行什么槽函数,那就不对了。


myemit.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef MYEMIT_H
#define MYEMIT_H
 
#include <QObject>
 
class  MyEmit :  public  QObject
{
     Q_OBJECT
public :
     explicit  MyEmit(QObject *parent = 0);
     void  send_emit();
 
signals:
     void  start_emit( int ,QString);
 
public  slots:
};
 
#endif // MYEMIT_H

myemit.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "myemit.h"
 
MyEmit::MyEmit(QObject *parent) : QObject(parent)
{
 
}
 
void  MyEmit::send_emit()
{
     int  a = 100;
     QString b =  "hello" ;
     //在MyEmit类中发送信号,在MainWindow类中接受
     emit start_emit(a,b);
}

注意:在MyEmit类中需要注意的是emit发送信号,这里这个信号只要在头文件申明一下就可以,不需要写实现,但是前提是需要有接受信号的connect将该信号和槽相连接,否则会报错,connect函数在这里我写在了mainwindow类中。

注意:还有一个就是如果要执行信号和槽,那么累必须要继承QObject,否则将执行不成功!这是重点!

总结:综上,我们要其他类中的结果显示在ui控件中,那么就从其他类中emit一个信号,mainwindow类中接受该信号将该信号connect到相关槽函数,在该槽函数中获取参数在用ui->进行控件setText设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值