1.
新建Qt Widgets Application
,
项目名称为login1
,在类信息页面保持类名和基类为MainWindow
和QMainWindow
不变,取消选择创建界面选项,如下图所示。
这里我们依然创建了Qt Widgets
应用,但是没有使用界面文件,这样就需要使用代码来实现界面。当然,如果有的童鞋说,纯代码编写就得是所有文件都自己写,如果你也有这种BT
想法,那么就老老实实创建一个空项目,然后往里面添加main.cpp
等文件吧,如果真想回到古时候,还可以参考《Qt Creator
快速入门》第2
章的后半部分,上面还讲到了使用记事本和命令行来编写编译程序,满足你的自虐心理。
2.
创建登录对话框类。
往项目中添加新文件,模板选择C++
分类中的C++ Class
,如下图所示。
在类定义页面,将类名设置为LoginDialog
,基类选择Custom
定制,然后手动设置为QDialog
。如下图所示。
设置完成后,先打开logindialog.h
文件,将其内容修改如下图所示。
这里先添加了QDialog
类的头文件,然后前置声明了QLabel
、QLineEdit
和QPushButton
类,这是因为在下面只是定义了这些类对象的指针,并不需要该类完整的定义,所以可以将它们的包含语句放到源文件中进行。在LoginDialog
类声明的开始需要添加Q_OBJECT
宏才能使用信号和槽等元对象系统功能。在private
部分定义了一些界面上需要的部件对象的指针。下面到logindialog.cpp
文件中对这些部件对象进行初始化,其内容如下图所示。
这里定义了构造函数和析构函数,在构造函数中对界面部件进行了初始化,设置了它们的位置及要显示的文本,这些代码实现的效果与前面在设计模式设置部件实现的效果是一样的。简单举例:move(70, 80)
就是将部件左上角的坐标设置为(70, 80)
,这个坐标是父窗口部件的,这里就是登录对话框,对话框的左上角是(0, 0)
点;setText()
就是设置显示文本;setPlaceholderText()
是设置占位符文本。
下面打开main.cpp
文件,在其中使用登录对话框,更改代码如下图所示。
这里的代码与前面例子中是一样的。现在运行程序,已经可以显示出登录界面了。
3
、实现功能
下面来实现两个按钮的功能,在Qt
中,按钮按下功能是通过信号和槽来实现的,在前面的内容中我们已经看到三种方式来关联信号和槽了,下面来看下怎么使用代码自定义槽,然后手动进行关联。
首先在logindialog.h
文件的类声明的最后添加如下代码:
private
slots
:
void
login();
这样便声明了一个槽,其实槽就是一个函数,一般使用slots
关键字,但在Qt 5
新关联语法下也可以不使用该关键字,那么就可以像声明一般函数一样来声明槽,具体的内容我们将在后面章节中讲解,这里大家有个印象即可,一般建议使用slots
关键字。
下面打开logindialog.cpp
文件,在构造函数的最后添加如下图所示的两行代码。
这里的connect()
函数就是用来关联信号和槽的,简单来说,第一个参数就是发射信号的部件,比如这里的loginBtn
按钮;第二个参数是发射的信号,比如这里是QPushButton
类的单击clicked()
信号;第三个参数是接受信号的部件,比如这里是this
即本部件也就是LoginDialog
;第四个参数是要执行的槽,比如这里是LoginDialog
类的login()
。使用connect()
函数就相当于以前在设计模式进行的关联设置。
下面在logindialog.cpp
文件最后添加槽的定义,如下图所示。
这里与前面示例中的代码是一样的,只不过usrLineEdit
等部件调用不再需要使用ui
对象。现在可以运行程序,已经实现了与使用设计模式相同的功能(密码显示样式可以在构造函数中使用pwdLineEdit->setEchoMode(QLineEdit::Password)
来设置)。