word文档里更加详细的讲解,带图的(由于在word里的图片没有copy出来,所以这博客里没有图片,图片在文档里了,文档里还把添加的代码标红了)
本人初学,看着有些教程,放到自己的机器上跑,各种bug,由于初学,调起来很吃力,导致学习效率极其低下。
难得找到合适自己的教程,下面进行分享,其中一部分是我补充的,来更适合初学者。
Qt_SDK_Lin32_offline_v1_1_4_en.run 这个是我用的安装文件,在ubuntu下装的。
实现功能:
在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框。
实现原理:
通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用if语句进行判断。
实现过程:
先新建Qt4 Gui Application工程,工程名为gongcheng_name(这么起名,有利于初初学者看清楚哪个是自己定义的,哪个是本身带的。但不建议以后这么命名),
选用QWidget作为Base class,
接着点完成就行了
这样便建立了主窗口。文件列表如下:
然后再新建一个Qt Designer Form Class类,
选用Dialog without Buttons,
类名为class_name,
这里类名(class_name)这么起理由同上。
这里,一定要加入到gongcheng_name.pro中。(默认情况是不用改动的。)
将其加入上面的工程中。之后文件列表如下:
接下来点击 界面文件-->class_name.ui进行界面编辑
双击后如下图,进行拖拽添加。
这里通过,右击“改变多信息文本”,可以改变字体(我这里就把它调大、加粗了)等
把输入框的objectName的值分别改为name_Edit和pass_Edit,左边的按钮改为login_Button
双击按钮,把显示的字分别改为login和close。
之后添加close的槽,点击“+” 发送者为class_Button信号为clicked(),接受者为class_name,槽为close();
之后在login按钮上面右击选择go to slot(进行自定义槽)
选择clicked()
添加如下代码
voidclass_name::on_login_Button_clicked()
{
accept();
}
接着
在main.cpp中添加的代码
#include<QtGui/QApplication>
#include"widget.h"
#include"class_name.h"
intmain(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
class_name login;
if(login.exec() == QDialog::Accepted)
{
w.show();
return a.exec();
}
else return 0;
}
下面可以运行一下了
会出现如下界面
点close会关闭(因为在槽里已经选择了close()函数了),点login后会弹出主窗口,如下图。
并在logindlg.cpp中,添加用户名密码判断功能。将登陆按钮的槽函数改为下面的代码:
(在login的槽里添加如下代码。)
加入#include <QtGui>的头文件。如果不加这个头文件,QMessageBox类不可用。
(说明:由于版本原因,现在的程序默认生成的ui类对象可能是ui,而不是m_ui,请到loginDlg.h中查看。)
voidclass_name::on_login_Button_clicked()
{
if(ui->name_Edit->text() ==tr("wujinzi")&&ui->pass_Edit->text() == tr("123456"))
//判断用户名和密码是否正确
accept();
else {
QMessageBox::warning(this,tr("标题"),tr("name \n or \n password \nerror!"),QMessageBox::Yes);
//可以看出 \n 是好使的。
//如果不正确,弹出警告对话框
}
}
这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。
这里我想让他输出“标题”,但看起来我没做到。
用户名和密码输入对了会出现下面的界面
让我把空白填上点东西吧
密码是要变成 ****** 的
在class_name.cpp里加上如下一行代码便可实现
class_name::class_name(QWidget*parent) :
QDialog(parent),
ui(new Ui::class_name)
{
ui->setupUi(this);
ui->pass_Edit->setEchoMode(QLineEdit::Password);
}
如果输入如下图中的用户名,在用户名前不小心加上了一些空格,结果程序按错误的用户名对待了。
我们可以更改if判断语句,使这样的输入也算正确。
void class_name::on_login_Button_clicked()
{
if(ui->name_Edit->text().trimmed()== tr("wujinzi")&&ui->pass_Edit->text() ==tr("123456"))
{
accept();
}
else {
QMessageBox::warning(this,tr("标题"),tr("name \n or \npassword \n error!"),QMessageBox::Yes);
加入的这个函数的作用就是移除字符串开头和结尾的空白字符。
最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽函数如下:
voidclass_name::on_login_Button_clicked()
{
if(ui->name_Edit->text().trimmed() ==tr("wujinzi")&&ui->pass_Edit->text() ==tr("123456"))
{
accept();
}
else {
QMessageBox::warning(this,tr("标题"),tr("name \n or \n password \n error!"),QMessageBox::Yes);
}
ui->name_Edit->clear();
ui->pass_Edit->clear();
ui->name_Edit->setFocus()
}
初次尝试写这么长的博客,请多加鼓励和支持