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

Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框

程序员文章站 2022-05-30 15:21:38
...

主窗口框架

主窗口为建立应用程序用户界面提供了一个框架,QT提供QMainWindow和其他相关类共同完成主窗口管理。

使用QT资源文件

1.创建主窗口菜单

( 1) 新建 Qt Widgets 应用, 项目名称为 myMainWindow, 基类选择 QMainWindow, 类名为MainWindow。
( 2) 创建完项目后, 双击 mainwindow.ui 文件进入设计模式。可以看到界面左上角的“这里输入”,可以在这里添加菜单. 双击“ 在这里输入”,将其更改为“ 文件(&F)”,然后按下回车键,效果如图所示。这里的&F 表明将菜单的快捷键设置为了 Alt + F, 可以看到,实际的显示效果中&符号是隐藏的。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
( 3) 同样的方法, 在文件菜单中添加“ 新建(&N)” 菜单项( 如果无法输入中文, 可以从别处复制粘贴), 效果如图所示。 菜单后面的那个加号图标是用来创建下一级菜单的。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框

2.添加菜单图标

( 1) Qt 中的一个菜单项被看做是一个 Action, 在设计器下面的 Action 编辑器中可以看到刚才添加的“ 新建” 动作, 如图 所示。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
( 2) 双击 action_N 条目, 会弹出编辑动作对话框, 这里可以进行各项设置, 比如可以设置动作的快捷键, 点击一下快捷键后面的行编辑器, 然后按下键盘上的 Ctrl + N, 这样就可以将该菜单的快捷键设置为 Ctrl + N。
( 3)在编辑动作对话框中的图标后面的 黑色箭头下拉框可以选择使用资源还是使用文件来设置图标, 如果使用文件的话, 那么就可以直接在弹出的文件对话框中选择本地磁上的一个图标文件。 如果直接单击这个按钮默认是使用资源。现在先按下编辑动作对话框的“ OK” 按钮关闭它。

3.添加资源文件

Qt 中可以使用资源文件将各种类型的文件添加到最终生成的可执行文件中, 这样就可以避免使用外部文件可能出现的一些问题。 而且,在编译时 Qt 还会将资源文件进行压缩,可以使可执行文件的体积尽可能缩小。
( 1) 向项目中添加新文件, 模板选择 Qt 分类中的 Qt Resource File, 如图所示, 然后将名称设置为“ myResources”。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
( 2) 创建完文件后会自动打开该资源文件, 这里需要先在下面添加前缀, 点击添加按钮,然后选择前缀, 默认的前缀是“ /new/prefix1”, 这个可以随意修改( 不要出现中文字符)。这里因为要添加图片, 所以修改为/myImages。 然后再按下添加按钮来添加文件, 这里最好将所有要用到的图片放到项目目录中。 比如这里在项目目录中新建了一个 images 文件夹,然后将需要的图标文件复制进去。 添加完文件后, 如图所示。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
( 3) 当添加完资源后, 一定要按下 Ctrl + S 来保存资源文件, 不然在后面可能无法显示已经添加的资源。

4.使用资源文件

( 1) 重新到设计模式打开新建菜单的编辑动作对话框, 然后添加图标。 在打开的选择资源对话框中, 第一次可能无法显示已经存在的资源, 可以按下左上角的绿箭头 来更新显示。效果如图所示。
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
( 2) 点击这里需要的新建图标 xxx.png, 按下“ OK” 按钮即可。 现在按下 Ctrl + R 键运行可看到图标已经改变。

创建登陆对话框

关于创建登录对话框前面用Dialog试过一次,这里再学习用常用的MainWindow实现一遍
( 1) 新建 Qt Widgets 应用, 项目名称为“login”, 类名和基类保持 MainWindow 和QMainWindow 不变。
( 2)完成项目创建后,向项目中添加新的 Qt 设计师界面类,模板选择 Dialog without Buttons,类名更改为“ LoginDialog”。 完成后向界面上添加两个标签 Label、 两个行编辑器 Line Edit和两个按钮 Push Button.
( 3)在属性编辑器中将用户名后面的行编辑器的 object Name 属性更改为“ userEdit”,密码后面的行编辑器的 object Name 属性更改为“ pssEdit”,登录按钮的 object Name 属性更改为“ loginBtn”,退出按钮的 object Name 属性更改为“ exitBtn”。
( 4) 更换风格,打开main.cpp,添加头文件包含#include<QStyleFactory>,然后在main()函数中
QApplication a(argc, argv);后添加一句 a.setStyle(QStyleFactory::create(“fusion”));这时候界面就会应用Fusion风格
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
(5) 关联信号与槽,F4进入信号与槽编辑模式,"退出" 按钮关联close(),登录右键转到槽函数,添加代码来实现使用用户名和密码登录, 这里只是简单的将用户名和密码设置为了固定的字符串apple和123456。 到 logindialog.cpp 文件中将登录按钮的单击信号对应的槽更改如下:

#include "logindialog.h"
#include "ui_logindialog.h"
#include "QMessageBox"
LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
}
LoginDialog::~LoginDialog()
{
    delete ui;
}
void LoginDialog::on_loginbtn_clicked()
{
    // 判断用户名和密码是否正确,
    // 如果错误则弹出警告对话框
    if(ui->useredit->text()==tr("apple")&&ui->passedit->text()==tr("123456"))
    {
    accept();
    }else{
/*   Qt 中的 QMessageBox 类提供了多种常用的对话框类型, 比如这里的警告对话框, 还有提示对话框、 问题对话框等。 
 这里使用静态函数来设置一个警告对话框,这种方式很方便。
其中的参数依次是: this 表明父窗口是登录对话框, 然后是窗口标题, 然后是显示的内容,最后一个参数是显示的按钮, 
这里使用了一个 Yes 按钮。 
*/
        QMessageBox::warning(this,tr("Waring"),
          tr("用户名或密码错误"),QMessageBox::Yes  );
    /*当登录失败后,希望可以清空用户名和密码信息, 并将光标定位到用户名输入框中。
    这个可以通过在判断用户名和密码错误后添加如下代码来实现
  */
    ui->useredit->clear();
    ui->passedit->clear();
    ui->useredit->setFocus();

    }
}

运行程序, 如果输入用户名为“ yafeilinux”, 密码为“ 123456”, 那么可以登录, 如果输入其他的字符, 则会弹出警告对话框, 如图
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框

对于输入的密码, 常见的是显示成小黑点的样式。 logindialog.ui 选中界面上的密码行编辑器部件, 在其属性编辑器中将 echoMode 属性选择为Password。 这时再次运行程序, 可以看到密码已经改变显示样式了。
在行编辑器的属性栏中还可以设置占位符, 就是没有输入信息前的一些提示语句。 例如将密码行编辑器的 placeholderText 属性更改为“请输入密码”, 将用户名行编辑器的更改为“请输入用户名”
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框
对于行编辑器, 还有一个问题, 比如输入用户名, 不小心在前面添加了一个空格, 这时也需要保证输入是正确的, 这个可以使用 QString 类的 trimmed()函数来实现, 它可以去除字符串前后的空白字符。 下面将 logindialog.cpp 文件中登录按钮单击信号关联的槽函数中的判断代码更改为:

if(ui->usrLineEdit->text().trimmed() == tr("yafeilinux")
&& ui->pwdLineEdit->text() == tr("123456"))

(6) main函数部分,添加重新登录和退出代码:
Qt5开发学习总结(四)——资源文件的使用与主窗口QMainWindow实现登录框

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "logindialog.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    //按下重新登录先隐藏当前界面
        close();
      LoginDialog dlg;
        //显示登陆界面,如果返回值等于这个,也就是点击了登录,那么程序显示主界面,如果不是,由于此时没有可以显示的界面就会完全退出程序
        if(dlg.exec() ==QDialog::Accepted)show();
}