QT中如何实现界面之间传递数据??

QT中如何实现界面之间传递数据??,第1张

之所以没有答案,不是这个难,而是很简单。

直接从 小对话框里面读数据就完事了。

刚写的例子:

//////////////////////dialog.cpp

Dialog::Dialog(QWidget *parent) :

QDialog(parent),

ui(new Ui::Dialog)

{

ui->setupUi(this)

ui->lineEditPassword->setEchoMode(QLineEdit::Password)

}

Dialog::~Dialog()

{

delete ui

}

void Dialog::on_pushButtonLogin_clicked()

{

//获取数据

m_strUser = ui->lineEditUser->text()

m_strPassword = ui->lineEditPassword->text()

//校验数据

if(m_strUser.isEmpty() || m_strPassword.isEmpty())

{

QMessageBox::information(this, QString(tr("Tips"))

,QString(tr("User name or Password is empty!")))

//等待下次按钮

}

else

{

//正确的用户名和密码

this->accept()

}

}

void Dialog::on_pushButtonQuit_clicked()

{

this->reject()

}

////////////////////////////////mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "dialog.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

//

ui->setupUi(this)

//

Dialog* pDlgLogin = new Dialog(NULL)

//以模式对话框显示

int nResult = pDlgLogin->exec()

if(nResult != QDialog::Accepted)

{

//登录错误,退出

exit(1)

}

//正常登录

//读取用户名和密码

m_strUser = pDlgLogin->m_strUser

m_Password = pDlgLogin->m_strPassword

//设置标签为用户名

ui->labelUserName->setText(m_strUser)

//绑定退出信号到关闭槽函数

connect(ui->action_Quit, SIGNAL(triggered()), this, SLOT(close()))

//将主窗口移到指定位置

this->move(QPoint(0,0))

//

}

MainWindow::~MainWindow()

{

delete ui

}

CONNECT(Qdialog1,SIGNAL(strSignal(QString)),

Qdialog1,

SLOT(strSlot(QString)));//信号发送过来

或者直接给个接口获取调用不就可以?- -!

1、广播的生命周期很短,经过 调用对象—实现onReceive—结束

整个过程就结束了。从实现的复杂度和代码量来看,广播无疑是最迷你的Android

组件,实现往往只需几行代码。广播对象被构造出来后通常只执行BroadcastReceiver.onReceive方法,便结束了其生命周期。所以有

的时候我们可以把它当做函数看也未必不可。

2、和所有组件一样,广播对象也是在应用进程的主线程中被构造,所以广播对象的执行必须是要同步且快速的。也不在里面开子线程,因为往往线程还未结束,广播对象就已经执行完毕被系统销毁。如果需要完成一项比较耗时的工作

, 应该通过发送 Intent 给 Service, 由 Service 来完成。

3、每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 ,

该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应。

由此我们可以看出,虽然广播可以实现跨进程通信,比如上文所说的通过广播改变另一应用的UI,但广播里面不建议(原因如上文红体字)执行耗时 *** 作,同时要注意到广播只可以被动的接收数据传递,然而接口定义语言可以在另一个进程执行耗时 *** 作。所以假如我们想要执行耗时 *** 作,又是跨进程通信的话,刚好AIDL又是基于service的,那么我们就可以选择用AIDL来实现了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6620738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存