Qt的界面切换实现
创建主窗体
首先,建立一个主窗体,可以为MainWindow,这一套Qt可以自己弄好。
上面的直接利用Qt Designer 拖动控件完成,你可以选中某个(或者某几个空间),然后右键,选择Layout,可以将选择的控件布局成合适的格局。(PS:我这里设置成水平对齐方式)
模拟密码验证
我们的流程是,输入用户名和密码,点击“登陆”按钮。若用户名和密码正确则,进入下个界面;反之,弹出错误信息提示。因为点击“登陆”按钮,就会产生一个clicked()信号,我们右键“登陆”按钮,进入clicked()对应的信号槽,此时在信号槽实现函数里添加如下代码。(此时对应MainWindow这个界面类)
void MainWindow::on_pushButton_clicked()
{
if(ui->lineEdit_2->text() == "1234" && ui->lineEdit->text() == "user")
{
//QMessageBox::information(NULL,tr("信息提示"),tr("登陆成功"));
this->hide();
emit emitsignal();
}
else
QMessageBox::information(NULL,tr("信息提示"),tr("错误"));
}
弹出下一个界面
因为弹出的是一个新界面,因此我们需要重新构建一个界面类,此处定义为Dialog类。构建方法为:右键工程名->添加新文件->Qt Qt设计师类,一路next 之后,我们可以看到Qt为我们生成了相应的dialog.h , dialog.cpp, dialog.ui 文件,我们通过操作.h 和 .cpp文件便可以控制该界面类上的控件了。设计的dialog.ui如下。
现在的问题是,如何才能用 MainWindow 上的"登陆“控件 的信号,绑定到弹出界面的槽。这里我们利用了emit 来发射自定义的信号 emit emitsignal(); ,emitsignal()就是我们自定义的信号。既然MainWindow里面 发射了信号, 谁来接收呢(当然得Dialog类来接受),于是我们又得在dialog.h中 自定义 我们的槽函数 ,
private slots:
void acceptedmain();
void on_pushButton_2_clicked();
紧接着就要去dialog.cpp中实现它,我们这里需要在槽函数中做的动作是弹出dialog.ui。很简单,我们用:
void Dialog::acceptedmain()
{
this->show();
}
当这里,我们还需要做一步工作,就是让emitsignal()信号和 acceptedmain()槽绑定起来,利用connect() 绑定。这个绑定的工作在主函数中完成,如下图:
//Qt界面切换以及登陆提示界面
#include "mainwindow.h"
#include <QApplication>
#include <dialog.h>
#include <ui_mainwindow.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow ww;
ww.show();
Dialog dd;
QObject::connect(&ww,SIGNAL(emitsignal()),&dd , SLOT(acceptedmain()) );
QObject::connect(&dd,SIGNAL(button2_clicked()),&ww , SLOT(on_ui2_ui1_window()) );
return a.exec();
}
就实现了dialog.ui界面的弹出。至此我们便实现了界面切换。
当然,你也可以使得按下dialog.ui的某个控件(比如”取消"键),希望界面由弹到MianWindow的Ui上去。和上面类似,我们在dialog.h中定义好信号button2_clicked() , 在 到Mianwindow.h中定义on_ui2_ui1_window() 槽函数,在槽函数中用 this->show()实现界面切换。
void MainWindow::on_ui2_ui1_window()
{
this->show();
}
这样我们便可以在两个界面间来回切换了。:)
上一篇: QT5 ——TreeWidget