当前位置: 首页 > news >正文

Qt5开发及实例学习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、建立QtGui应用,项目名称test,基类"QDialog", 类名保持Dialog,选择"创建界面"

2、双击dialog.ui,打开Qt设计器,中间的空白视窗就是ParentWidget,接着需要建立一些ChildWidget。在工具箱中找到需要的Widget:Label,LineEdit[输入文件],HorizontalSpacer和两个PushButton[默认1个]。

3、设置widget的属性

  • 选择Label,确定ObjectName为"label",设置text属性为"&CellLocation:"
  • 选择LineEdit,确定ObjectName为"lineEdit"
  • 选择第一个按钮,确定ObjectName为"okButton",设置text属性为"OK", enabled属性为"false",default属性"true"
  • 选择第2个按钮,确定ObjectName为"cancelButton",设置text属性为"Cancel"
  • 将表单背景window Title属性设为"Go To Cell"

349d214c6881c3e2c4f689896ef082c55d0.jpg

4、运行工程·,则界面中的label会显示&

2c9fa6f37db0e759056fa3990082b708494.jpg

选择"编辑伙伴Buddsies"命令,在此模式下,可以设置伙伴

5aa83287bb2c0f995d91a84c6e136583261.jpg

选择label并拖到lineEdit,然后放开,这时候会有一个红色箭头label->lineEdit。

再次运行程序,label中的&不再出现,此时label和lineEdit这两个Widget互为伙伴。选择"编辑伙伴Buddsies",既可离开此模式,回到原本的编辑模式

1199eab0202ef7afe6dd22c34e4dc3b6624.jpg

5、对Widget进行位置编排的布局LayOut

  • 利用ctrl键一次选取多个widget,首先选取label与lineEdit,接着单击上面的水平布局按钮。然后选取spacer和两个pushButton,水平按钮布局:

816dd35a6f8b34573c7a88e7f2fd8c0f4f9.jpg

  • 选取整个form,不选取任何项目,垂直布局

22e67aee6a9164c4519f75e0fca07e2ba59.jpg

  • 选择上方的调整大小按钮,整个表单就自动调整为合适的大小,此时,出现红色的线将Widget框起来,被框起来的    Widget表示已经被选定为某种布局了

331024deeb46d24fd47c405bd5119e51793.jpg

6、单击编辑[Tab]键顺序按钮,每个widget上都会出现一个方框显示数字,表示安装Tab键的顺序,调整到需要顺序,然后回到编辑模式

a2094681a1551bf488f261dff77a23882dd.jpg

运行程序效果此时为:

9434effe718cb7488f3e988689c792bc0f7.jpg

7、在头文件"dialog.h"中的dialog类声明中添加语句

private slots:
    void on_lineEdit_textChange();

8、在源文件"dialog.cpp"中的构造函数中添加代码如下:

#include "dialog.h"
#include "ui_dialog.h"
#include <QRegExp>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this); //产生界面之后,setupUi将会根据naming convention对slot进行连接,即连接on_objectName_signalName()与
    //ObectName中的siganlName的signal,也就是自动创建: connect(ui->lineEdit, SIGNAL(textChange(QString)), this, SLOT(on_lineEdit_textChange));
    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}"); //限制字元输入的范围:只允许第一个字元输入大小写英文字母,后面接一个非0的数字,在接0-2位可为0的数字
    ui->lineEdit->setValidator(new QRegExpValidator(regExp, this)); //设置值的类型
    connect(ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); //连接OK按钮到Dialog的accept()槽函数
    connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
    //accept和reject槽函数都会关闭Dialog视窗,但是accept会设置Dialog的结果至QDialog::Accepted(结果为1);
    //reject会设置Dialog的结果至QDialog::rejected(结果为1);因此可以根据这个结果设置按钮的是ok还是cancel
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_lineEdit_textChange()
{
    ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput()); //根据输入的文字是否有效来启用或者停止"OK"按钮
    //QLineEdit::hasAcceptableInput()中使用构造函数中的Validator
}

 

转载于:https://my.oschina.net/u/3919756/blog/1934864

相关文章:

  • 深入BUG分析
  • HTML5的优缺点
  • 2018腾讯广告算法大赛总结/Rank7-复习代码
  • Android Studio NDK:三、打包SO
  • 7×14小时陪伴,DaDaBaby核心课程升级背后到底有多少考量?
  • java中hashset重写equals方法中只比较属性值的问题
  • WPF 标题栏 右键窗口标题添加关于对话框
  • 利用矩阵快速幂转换的题目
  • 最新软件工程师薪资大揭秘!你的薪资达到平均水平了吗?
  • Java自学之路(小白向)
  • 由两个栈组成队列
  • jenkins1
  • 为什么要用到Nginx来做负载均衡?通俗的解释
  • hdu_2955
  • Linux常用命令 — 用户管理useradd、passwd、who、w
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【翻译】babel对TC39装饰器草案的实现
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Java 最常见的 200+ 面试题:面试必备
  • js继承的实现方法
  • laravel5.5 视图共享数据
  • MySQL主从复制读写分离及奇怪的问题
  • Spring-boot 启动时碰到的错误
  • Vue--数据传输
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 那些年我们用过的显示性能指标
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 王永庆:技术创新改变教育未来
  • 怎么把视频里的音乐提取出来
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​2021半年盘点,不想你错过的重磅新书
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #pragma data_seg 共享数据区(转)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (二)正点原子I.MX6ULL u-boot移植
  • (南京观海微电子)——I3C协议介绍
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./configure、make、make install 命令
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net Web窗口页属性
  • .NET 表达式计算:Expression Evaluator
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET/C# 使窗口永不获得焦点
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net6使用WebSocket与前端进行通信
  • .NetCore项目nginx发布
  • .NET企业级应用架构设计系列之结尾篇
  • .Net中的集合
  • /var/spool/postfix/maildrop 下有大量文件
  • [ JavaScript ] JSON方法
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [acwing周赛复盘] 第 69 场周赛20220917