请参考我前面写的这篇文章: (一)QT5之手动编写界面创建工程。
设定窗口大小的函数有两个:
setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
如同函数名,设置最大和最小,只要把这两者的大小设定一致,就可以达到窗体大小的限定,但是我们一般不使用这个,我们是用的是这个函数: void setFixedSize(int w, int h),其中
setFixedSize 相当于设置了最小大小和最大大小,所以使用该函数即可。
当然我们首先需要设置窗体的大小,使用该函数:void resize(int w, int h) ,通过两个参数就可以设置窗体的大小了。下面是我的设置:
我们需要三个控件,分别是QLable,QLineEdit,QButton。由于目前我刚开始学习,所以打算使用绝对位置来布局,后面学习到水平和垂直布局之后在使用布局。
所以我限定窗体大小。
在QT中,头文件和类是对应上的,所以我们在创建时候使用对应的头文件名即可,这三个控件分别对应三个头文件:
#include
#include
#include
所以对应的在类的申明里面定义三个public变量如下:
setGeometry 函数,可以自由的调整位置,但是如果使用layout,该函数将不起作用,所以目前我没学到layout块布局,所以使用setGeometry。
qt中 void setGeometry(int x, int y, int w, int h) 很简单,一共有四个参数,分别对应的位置和大小,然后根据实际的窗体来布局即可。
我在其中的布局是:
然后运行就可以得到我们的界面了,接下来是单击信号的处理,我们将使用到槽这个功能。
我们当中使用按键触发点击事件来做一些处理,那么这里使用到信号和槽,目前我的水平经过百度,只是在会用阶段,我大概说一下流程:
1、申明按键触发的两个回调函数
2、实现这两个回调函数
确定按钮实现的是判断密码和账户是否相同,取消按钮实现的功能是退出整个程序。
3、将按钮点击事件绑定到对应的信号和回调函数上面去。
使用的是QObject::connect该方法,里面需要填入四个参数,第一个就是你的按钮,第二个是信号触发方式,第三个是this指针,第四个是你写的回调函数,这样即可完成绑定。
账号和密码不相同:
log输出登录失败,到此,第一个手动编写的登录界面已经结束了。
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
void set_ui();
public slots:
void btn_login_clicked(bool);
void btn_quit_clicked(bool);
private:
QLabel *lab_name;
QLabel *lab_passwd;
QLineEdit *line_name;
QLineEdit *line_passwd;
QPushButton *btn_login;
QPushButton *btn_quit;
};
#endif // WIDGET_H
widget.c文件
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->set_ui(); //直接运行这个设置ui
}
Widget::~Widget()
{
}
void Widget::set_ui()
{
this->resize(600,400);
this->setFixedSize(this->width(),this->height()); //设置窗体变化限定死
this->lab_name = new QLabel(this);
this->lab_passwd = new QLabel(this);
this->lab_name->setText("账号:");
this->lab_passwd->setText("密码:");
this->line_name = new QLineEdit(this);
this->line_passwd = new QLineEdit(this);
this->line_passwd->setEchoMode(QLineEdit::Password);
this->btn_login = new QPushButton(this);
this->btn_login->setText("确定");
this->btn_login->setGeometry(200,200,95,25);
this->btn_quit = new QPushButton(this);
this->btn_quit->setText("取消");
this->lab_name->setGeometry(200, 100, 30, 25);
this->lab_passwd->setGeometry(200, 150, 30, 25);
this->line_name->setGeometry(250, 100, 150, 25);
this->line_passwd->setGeometry(250, 150, 150, 25);
this->btn_quit->setGeometry(310,200,90,25);
this->btn_login->setGeometry(200,200,95,25);
QObject::connect(this->btn_login,SIGNAL(clicked(bool)),this,SLOT(btn_login_clicked(bool)));
QObject::connect(this->btn_quit,SIGNAL(clicked(bool)),this,SLOT(btn_quit_clicked(bool)));
}
void Widget::btn_login_clicked(bool)
{
QString name = this->line_name->text();
QString passwd = this->line_passwd->text();
if(name == passwd){
qDebug() << "登录成功" << endl;
}
else {
qDebug() << "登录失败" << endl;
}
}
void Widget::btn_quit_clicked(bool)
{
this->close();
}