欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt的界面切换实现

程序员文章站 2022-05-28 11:56:11
...

创建主窗体

首先,建立一个主窗体,可以为MainWindow,这一套Qt可以自己弄好。
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如下。
Qt的界面切换实现
现在的问题是,如何才能用 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();
}

这样我们便可以在两个界面间来回切换了。:)

Qt的界面切换实现Qt的界面切换实现
Qt信号槽机制参考链接