Qt

xiaoxiao2021-02-28  105

Qt学习记录4

Qt; C++ 11; Qt父子窗体; Qt父子窗体间信息传递; Qt信号与槽;

学习Qt将近2个月了,现在对学习所得进行记录。本文是log2000计划的一部分

实验环境: Qt5.8.0 支持C++ 11 ubuntu 14.04 64bit


接下来,探究父子窗体间数据传递。以一个模拟登陆界面为例。

实现:首先显示父界面,接着点击下拉菜单,选中“log in”按键,弹出子窗体。在子窗体中输入用户名和密码,点击“OK”键,这时父窗口中会显示用户输入的用户名和密码。

由于ubuntu系统的原因,下拉菜单不在生成的窗口中,而是在ubuntu desktop的顶栏上。 为了美观,我将下拉菜单中的选项按键同样添加到窗体中。这样既可以通过顶栏中的下拉菜单选择“log in”,还可以直接通过点击窗体中的“log in”按键使子窗口弹出。

生成的窗体效果大概是这样

父子窗口之间传数据:信号与槽

首先在上一篇学习记录的基础上,将原先的按键名由123和456改为“options”和“log in”。 在Qt窗体ui设计界面中对弹出的窗口中加入一个触发部件,如push button,我将它命名为“OK”。

接着加入两个文字输入部件textEdit,一个作为username一个作为password

右键转到槽,选clicked,这时就会发现在dialog.cpp(弹出的窗口对应的cpp文件)中多了on_pushButton_clicked,修改它,加入emit发射信号

void Dialog::on_pushButton_clicked() { QString s1= ui->textEdit->toPlainText();//文字输入框,如果加的是lineEdit,那么传输字符函数就是text(),如果加的是textEdit,那么传输字符函数就是toPlainText() QString s2= ui->textEdit_2->toPlainText(); emit giveTextUname(s1); emit giveTextPword(s2); }

接着在dialog.h中加入signal

signals: void giveTextUname(const QString &string); void giveTextPword(conse QString &string);

接着在mainwindow.h中加入接收函数

private: void putTextUname(QString); void putTextPword(QString);

接着在mainwindow.cpp中加入刚才函数的具体实现

void MainWindow::putTextUname(QString s) { ui->label->setText(s);//first label } void MainWindow::putTextPword(QString s2) { ui->label_2->setText(s2);//second label }

最后修改mainwindow.cpp中的on_action456_triggered()这时这个函数对应的就已经是改过名的“log in”按键了

void MainWindow::on_action456_triggered() { Dialog * d=new Dialog(this);//'this' stands for father window pointer connect(d,&Dialog::giveTextUname,this,&MainWindow::putTextUname);//connect signal with slot connect(d,&Dialog::giveTextPword,this,&MainWindow::putTextPword);//connect signal with slot d->show(); //d->exec(); }

最终实现的效果:

对于connect的具体用法,我还会单独写一篇博客。


visitor tracker


转载请注明原文地址: https://www.6miu.com/read-80534.html

最新回复(0)