资源描述
第一个Qt窗口程序,基于基类mainwindow
要是实现的界面如:
开工
1.新建qt项目,命名为HelloDlg, 基类选择mainwindow【注意不要选错了,否则有些东西没有啦】
a.
b.
此时项目结构如图
接下来新建一个qt设计师界面类
选择 Dialog without Buttons 其它默认
此时项目架构如图:
设计如图Dialog界面
设置其对象名如:UNm_ledit表示lineedit用户名输入框的对象名
然后点击tab按钮,设置 tab顺序
依次点击其中的数字, 然后按下F3键即可。
然后右键”登陆”按钮 选择 转到槽
然后输入如下代码:
注意要在dialog.cpp中 包含 QMessageBox 头文件
#include <QMessageBox>
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
void Dialog::on_login_Btn_clicked()
{
if(ui->UNm_ledit->text() == tr("qt") && ui->pwd_ledit->text() == tr("123"))
{
accept();
}
else
{
QMessageBox::warning(this, tr("Warning"), ("user name or password wrong!"), QMessageBox::Yes);
ui->UNm_ledit->clear(); //清空用户名编辑框
ui->pwd_ledit->clear();
ui->UNm_ledit->setFocus(); //鼠标回到用户名编辑框
}
}
此时已经完成了登陆按钮的功能, 但是点击登陆之后, 怎么跳转到主窗口中去呢?
这里就需要在主窗口的文件中做如下处理,先回到main.cpp文件中。
首先在main.cpp中包含dialog.h头文件
#include “dialog.h”
然后如输入如下代码 ,代码中附有详细解释, 代码简单,所以不单独解释
return 0 , 表示没有进入主窗口, 一直不退出!
此时编译之后, 通过输入用户名和密码点击登陆 就可以键入主窗口了, 但是发现 在输入密码的时候是明文显示的, 那肿么是好? 再次回到dialog.cpp文件中, 在其初始化代码中告诉LineEdit编辑框说明这是个密码框就可以了,具体代码如下:
添加的代码只有一句: ui->pwd_ledit->setEchoMode(QLineEdit::Password);
好了, 现在输入密码没有问题了, 也可以登陆主窗口了,但是登陆主窗口里面什么都没有, 那么怎么是好?
下面要做几件事情
1.编辑菜单栏, 为其添加图标,为其添加响应事件
2.在主窗口中动态显示当前时间
3.编辑状态栏
1.编辑菜单栏
单击mainwindow.ui 回到mainwindowui设计界面
在这里设置菜单选项
大概设置成这个样子
然后添加图标
添加图标的第一步就是要准备ico图标资源, 在项目目录下新建一个image文件夹把图标放到里面去
然后新建Qt资源文件
命名为Resource
此时的项目架构为:
然后点击添加 前缀
将前缀更改为/menu
然后再点击添加 添加文件,将项目目录下的image文件夹中的图标全部添加进来
然后回到mainwindow.ui设计界面,
看到编辑器下面的 Action 编辑器 ,然后双击其中的按钮就会弹出一个属性框出来
这里更改每个按钮的对象名称, 这里的“新建”按钮,我们更改为 m_new_Btn
然后下面那个有“图标” , 后面那个有个下列框, 点进去,选择刚才的图标, 确定,就可以把图标添加进来了
这里你可能会发现点击进去,没有看到刚添加到资源文件中的图标, 这是因为你刚没有保存Resource.qrc文件所致,回去保存一下,回来再看就有了
然后在Action编辑器中选中新建按钮 右键 转到槽,就可以为这个按钮添加响应函数了
此时我们先在mainwindow上添加三个个Label,分为命名为 view_new , view_time ,view_str
然后在mainwindow.cpp中找到刚才的新建按钮函数,并输入如下代码
2.接下来要实现动态显示时间,这里就需要有一个定时器,定时器的初始化同样在mainwindow.cpp的初始化代码中进行
首先还是要先包含#include <QTimer>
然后输入如下代码
这里还需要建立一个定时器的函数, 来响应定时器的变化,就是说时间到了之后,应该来刷新显示时间, 這样才能实现动态显示时间。
先到mainwindow.h中添加私有信号槽
private slots:
void timerUpDate();
然后到mainwindow.cpp中完成timerUpdate()函数, 代码如下。然后还要到mainwindow的初始化函数中新建一个Timer ,具体代码如下
接下来添加状态栏, 在状态栏中我们还添加两个信息显示, 于是要声明两个label用来显示这些信息, 这两个label 在mainwindow.h中声明即可。
回到mainwindow.h文件,当然首先还是要包括相应的头文件
#include <QLabel>
然后
private:
QLabel *msgLabel;
QLabel *ztgLabel;
然后回到mainwindow.cpp中添加如下初始化状态栏代码
最终初始化添加的代码如下:
然后还要到定时器函数中添加相应的代码使得状态栏中的时间动态刷新显示
至此文本的第一个Qt窗口案例就完成了。
但是你会发现 当输入用户名之后向用回车键来跳到密码框中输入时,此时焦点跳到了登陆按钮上去了, 那怎么让它在输入完用户名之后用回车来跳到下一个要输入的密码框上呢?
这个要首先禁用按钮的聚焦,然后设置判断函数来判断当前跳转到了哪个焦点
首先设置按钮无焦点
首先在dialog.h中 声明一个信号槽函数
private slots:
void lineEditfocus();
然后在初始化代码中输入如下代码
并实现其信号槽函数
即可用回车从lineedit1 跳到lineedit2了, 但是要注意的是, 要禁用所有的按钮聚焦。就是要设置所有的按钮setFocusPolicy(Qt::NoFocus); 才行。
完整项目源码:
展开阅读全文