一个月前接触到了Qml,也做过一些练习,但只能实现动画和简单的布局功能,逻辑部分和数据处理很难上手,看到许多人将C++和结合起来,Qml负责界面设计,C++实现逻辑处理,但将C++注册到 Qml中一直让我头疼,比如属性声明和函数声明类想不通为什么这么做,可能是时间问题吧,慢慢的就发现了其实也不难,花了好几天做成了这个小应用,算是这一阶段的小小纪念吧。

下来就是贴代码的时间了.

先是main.qml

启动时先进入登录界面

import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 1.0
import Login_gui 1.0
import QtQuick.Particles 2.0 Window {
visible: true
id:mainwindow
width: 300
height: 533
color: "#F0F0F0"
LoginDialog {}
}

LoginDialog的代码如下

import QtQuick 2.0
import Login_gui 1.0
import QtQuick.Controls 1.1
Rectangle {
id:loginsence
width: 300
height: 533
color: "#F0F0F0"
visible: true
x:300
Component.onCompleted: {
x=0;
}
Behavior on x {
NumberAnimation {easing.type:Easing.OutQuint;duration: 1100}//OutQuint动画效果 结束时速度变慢
} property string userselect
/*************************************************************************************/
//登陆请求函数
function login_req()
{
//判断用户名是否有效
if (userinput.text== "")
{
message.text = "请输入用户名!"
message.opacity = 1
return
}
//判断密码是否有效
if (passwordinput.text == "")
{
message.text = "请输入密码!"
message.opacity = 1
return
}
//显示登陆动画
load_gif.opacity = 1
//登陆请求
//console.log("***********************")
login_gui.user_id = userinput.text
login_gui.password = passwordinput.text
login_gui.slot_login_req()
} /*************************************************************************************/
Login_gui{
id:login_gui
property var loginstudent
onSig_login_result:
{
//关闭登陆动画
load_gif.opacity = 0
//根据登陆结果处理
switch (result)
{
//登陆成功
case 0:
message.text = "登陆成功"
message.opacity = 1
if(userselect=="studentselect " )
{ loginstudent= Qt.createComponent("StudentDialog.qml").createObject(loginsence);break; }
else
{ loginstudent= Qt.createComponent("TeacherDialog.qml").createObject(loginsence);break; }
//无此用户名
case 1:
message.text = "登陆失败:无此用户名"
message.opacity = 1
break;
//密码错误
case 2:
message.text = "登陆失败:密码错误"
message.opacity = 1
break;
case 3:
message.text = "登陆失败:请选择登录类型"
message.opacity = 1
}
}
}
/************************************************************************/
Rectangle //顶栏
{
id: top_bar
anchors.left: parent.left;
anchors.leftMargin: parent.width/2;
anchors.top: parent.top;
anchors.topMargin: 10;
border.color: "#707070"
Text
{
id: title
anchors { top: parent.top; horizontalCenter: parent.horizontalCenter }
text: "登陆"
font.bold: true
font.pixelSize: mainwindow.height/25;
color: "blue"
}
}
/**************************************************************/
//用户名框
Rectangle{
id:loginBox
height:parent.height/16;width:parent.width;
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.top: parent.top;
anchors.topMargin: 150;
color:"white"
Row{
spacing:1
Rectangle//用户名框
{ id:user
height:loginBox.height;width:loginBox.width/4;
anchors.left: loginBox.left;
anchors.leftMargin:0;
anchors.bottom: loginBox.bottom;
anchors.bottomMargin: 0;
Text{
text: "用户名:";
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 0;
font.bold:false
font.family: "微软雅黑"
color:"black"
font.pointSize: 15
}
}
Rectangle//用户名输入框
{
id:loginuser
height:loginBox.height;width:loginBox.width-user.width;
anchors.left: loginBox.left;
anchors.leftMargin:user.width;
anchors.bottom: loginBox.bottom;
anchors.bottomMargin: 0;
TextInput
{ id:userinput
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 0;
width: parent.width
height: parent.height/2
font.family: "微软雅黑"
font.pointSize: 15
focus: true
color:"black"
text: "王红"
// MouseArea { anchors.fill: user;onClicked: user.selectAll()}
}
}
}
}
/************************************************************************/
//密码框
Rectangle{
id:passwordBox
height:parent.height/16;width:parent.width;
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.top: parent.top;
anchors.topMargin: loginBox.height+151;
color:"white"
Row{
spacing: 1
Rectangle//密码框
{ id:password
height:passwordBox.height;width:passwordBox.width/4;
anchors.left: passwordBox.left;
anchors.leftMargin:0;
anchors.bottom: passwordBox.bottom;
anchors.bottomMargin: 0;
Text{
text: "密 码:";
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 0;
font.family: "微软雅黑"
font.pointSize: 15
}
}
Rectangle{ //密码输入框
id:loginpassword
height:passwordBox.height;width:passwordBox.width-password.width;
anchors.left: passwordBox.left;
anchors.leftMargin:password.width;
anchors.bottom: passwordBox.bottom;
anchors.bottomMargin: 0;
color:"white"
TextInput{
id:passwordinput
text: "1234567"
anchors.left: parent.left;
anchors.leftMargin:0;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 0;
width: parent.width
height: parent.height/2
font.family: "微软雅黑"
font.pointSize: 15
// MouseArea { anchors.fill: password;onClicked: password.selectAll()} }
}
}
}
/************************************登录*******************************************/
Rectangle{
id: loginbutton
anchors.left: parent.left
anchors.leftMargin: 6
anchors.top: passwordBox.top
anchors.topMargin: parent.width/4.2;
width: parent.width-12;
height: passwordBox.height;
radius: 5 //倒角
color:"#19cff7"
Text{
anchors.horizontalCenter: parent.horizontalCenter //水平中心
anchors.verticalCenter:parent.verticalCenter //垂直中心
text:"登录"
font.family: "华文细黑"
styleColor: "white"
font.pointSize: 15
}
MouseArea {
anchors.fill: parent;
onClicked:{console.log(passwordinput.text); login_req()} }
}
/************************************登录动画*****************************************/
AnimatedImage
{
id: load_gif ;
source: "qrc:/new/prefix1/image/login.gif"
anchors {horizontalCenter: mainwindow.horizontalCenter;verticalCenter:mainwindow.verticalCenter}
y: 180; x:90
opacity: 0
} /***************************************信息框*************************************/
Rectangle{
anchors.horizontalCenter: parent.horizontalCenter //水平中心
anchors.bottom: loginBox.bottom
anchors.bottomMargin:45;
width: loginbutton.width/2;
height: loginbutton.height/2;
radius: 3 //倒角
color: "#F0F0F0"
Text{
id:message
anchors.horizontalCenter: parent.horizontalCenter //水平中心
anchors.verticalCenter:parent.verticalCenter //垂直中心
font.family: "华文细黑"
styleColor: "black"
font.pointSize: 10
opacity: 0
} }
/****************************注册*************************************/
Rectangle{
id:newuserrer
anchors.right: parent.right;
anchors.rightMargin: 28;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 35;
Text
{
id: newuser
anchors { top: parent.top; horizontalCenter: parent.horizontalCenter }
text: "新用户"
font.family: "华文细黑"
font.pixelSize: 12 color: "#3aa7ea"
MouseArea {
anchors.fill: parent;
property var login
onClicked:
{
login= Qt.createComponent("NewUserDialog.qml").createObject(loginsence);
loginsence.deleteLater();
}
}
} }
/****************************登录类型*************************************/ Rectangle {
anchors.horizontalCenter: parent.horizontalCenter //水平中心
anchors.bottom:loginbutton.bottom;
anchors.bottomMargin: (loginbutton.y-passwordBox.y+loginbutton.height)/2
ExclusiveGroup {
id: language;
}
Row {
anchors.centerIn: parent;
spacing:loginsence.width/4.5
CheckBox {
id:student
text: "学生登录";
exclusiveGroup: language;
onCheckedChanged: { if(checked){login_gui.student=true;login_gui.teacher=false;userselect="studentselect " } }
} CheckBox {
id:teacher
text: "教师登录";
exclusiveGroup: language;
onCheckedChanged: { if(checked){ login_gui.teacher=true;login_gui.student=false;userselect="teacherselect"} }
}
}
} /************************************************************************************/
}

没什么难点,主要是界面布局费点事,定义了一个属性property string userselect来标标识是管理员登录还是学生登录,以便进图不同的界面。还有就是使用Textinput是,需要设置高度和宽度,否则无法输入文字,这个很是奇怪,我觉得软件做的不够人性化,好了,今天就先到这里了。

Qml和C++开发的学生信息管理软件一的更多相关文章

  1. 企业信息管理软件 OA、CRM、PM、HR 财务、ERP等

    本文就企业信息管理软件做一个记录. 最近公司要开发物料管理系统....于是查找一些资料 Excel垄断企业信息管理软件二三十年无人撼动:OA.CRM.PM.HR软件不温不火难以普及. 已有的信息化市场 ...

  2. 【学员管理系统】0x02 学生信息管理功能

    [学员管理系统]0x02 学生信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] Django框架大致处理流程 捋一下Django框架相关的内容: 浏览器输入URL到页面展示 ...

  3. 一起来开发Android的天气软件(三)——使用Volley实现网络通信

    距离上一篇一起来开发Android天气软件二的时间又将近半个月了,之间一直由于有事而没有更新实在抱歉,近期会加快更新的步伐.争取在2015年到来前写完这系列的博文,上一章我们已经使用LitePal框架 ...

  4. 个人整理的 Windows 下 .NET 开发必装的软件

    注: 最后更新时间:2019-03-15 一..NET 开发 1. 必装 软件名称 说明 下载地址 JetBrains Toolbox JetBrins 全家桶管理工具. 下载地址 JetBrains ...

  5. 术语-软件-软件开发:SDK(软件开发工具包)

    ylbtech-术语-软件-软件开发:SDK(软件开发工具包) 软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架 ...

  6. c#开发地磅称重软件

    2012年时即做过一个地磅称重软件,最近公司又接了一个地磅过磅软件的项目,把遇到的问题总结一下以备后用. 1.接线问题 因为客户方原来单独使用仪表,仪表未有接线和电脑连接,为此颇费周折才做好了接线.接 ...

  7. window下的开发环境:常用软件

    window下的开发环境:常用软件 Visio 2010  - 产品设计 xmind        -产品设计 Axure       -产品设计 Edraw max 7.3(破解版)  -产品设计 ...

  8. python开发的学生管理系统

    python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...

  9. "零代码”开发B/S企业管理软件之一 :怎么创建数据库表

    声明:该软件为本人原创作品,多年来一直在使用该软件做项目,软件本身也一直在改善,在增加新的功能.但一个人总是会有很多考虑不周全的地方,希望能找到做同类软件的同行一起探讨. 本人文笔不行,能把意思表达清 ...

随机推荐

  1. ADB工具的使用

    ADB即Android Debug Bridge调试桥,可以用来调试管理Android设备与设备模拟器的状态,比如,在Android设备上运行Shell,在电脑和设备之间互传文件... 那么问题来了. ...

  2. 第三篇——Struts2的动态方法调用

    Struts2动态方法调用 默认方式:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success: method方式:执行method属性中定义的方法,没有该方法,页面报错: 通 ...

  3. webform-AJAX

    AJAX = 异步 JavaScript和XML(标准通用标记语言的子集).AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

  4. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  5. flask 定义数据库关系(一对多)

    定义关系 在关系型数据库中,我们可以通过关系让不同表之间的字段建立联系.一般来说,定义关系需要两步,分别是创建外键和定义关系属性.在更复杂的多对多关系中,我们还需要定义关联表来管理关系.下面我们学习用 ...

  6. QT创建TCP Socket通信

    最近在学习QT,了解到QT可以进行SOCKET网络通信,进行学习,并建立一个简单的聊天DEMO.为了测试是否能与VS2012下的程序进行通信,在VS2012下建立一个客户端程序,进行通信测试,发现可以 ...

  7. Linux 进程管理、系统状态查询

    1.内存给进程一段空间让他启动,让内核通过cpu来管理它. 2.ps命令查看命令信息. 用户.pid号.使用cpu.使用内存.虚拟内存.真实内存.控制台.状态.启动时间.运行时间.名 USER PID ...

  8. [转载]Windows系统的错误报告保存在哪个文件夹里?

    转自:http://www.xitonghe.com/jiaocheng/xp-786.html   Windows系统的错误报告保存在哪个文件夹里? 发布时间:2014-10-31 20:52:20 ...

  9. spring 事务的七中传播行为五中隔离

    事务的传播行为(七): public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS ...

  10. C#---装箱、拆箱的一个案例

    using System; namespace ConsoleApplication1 { interface IInterface { void Add(int num); } struct Tes ...