QT-面向对象的QT编程,QT设计师

一、面向对象的编程

《案例》通过一个按钮更新时间显示,显示格式为xx:xx:xx

//主函数文件

#include<QApplication>
#include"TimeDialog.h"
int main(int argc,char** argv){

    QApplication app(argc,argv);
    TimeDialog time;
    time.show();
    return app.exec();
}
//类声明文件
#ifndef __TIMEDIALOG__
#define __TIMEDIALOG__
#include<QDialog>
#include<QTime>
#include<QPushButton>
#include<QLabel>
#include<QVBoxLayout>//垂直布局器
class TimeDialog:public QDialog{
    Q_OBJECT
public:
    TimeDialog(void);
private slots:
    void timeClicked(void);//因为label组件设置文本槽函数需要一个参数,但是buttonClicked信号是无参的。无法匹配,所以自定义槽函数进行连接
private:

    QPushButton* m_btnTime;
    QLabel* m_labTime;

};

#endif
//类实现文件
#include "TimeDialog.h"
TimeDialog::TimeDialog(){
    setWindowTitle("时间");
    //获取按钮对象
    m_btnTime=new QPushButton("获取时间",this);
    //获取标签对象
    m_labTime=new QLabel("00:00:00",this);
    m_labTime->setFrameStyle(QFrame::Panel||QFrame::Sunken);//设置边框风格
    m_labTime->setAlignment(Qt::AlignHCenter||
                Qt::AlignVCenter);//设置对齐方式
    //创建垂直布局器
    QVBoxLayout* layout=new QVBoxLayout(this);
    layout->addWidget(m_labTime);
    layout->addWidget(m_btnTime);

    //显示布局器
    setLayout(layout);

    //连接
    connect(m_btnTime,SIGNAL(clicked()),this,SLOT(timeClicked()));

}
void TimeDialog::timeClicked(void){
    //currentTime返回QTime类对象,他是一个静态静
    //态成员函数
    //toString讲时间转换为字符串
    m_labTime->setText(
            QTime::currentTime().
                toString("hh:mm:ss"));
}

也可以自定义信号函数完成与标签的连接(注意自定义函数只能声明,不能定义)



二、QT设计师

1、《案例》使用designer重构加法计算器

(1)创建工程目录,并进入

(2)在终端输入designer进入设计师界面

  选择一个父窗口的模板,Dialog without buttons->单击Create

  Widget box(窗口部件盒)包含了常用的组件,从上到下分别为

第一组(Layouts) 布局器
第二组(Spacers) 伸展器
第三组(Buttons) 按钮
第四组(Item views) 列表
第五组(Item widgets) 列表
第六组(Container) 容器
第七组(Input Widgets) 输入组件
第八组(Display Widgets) 显示组件

  右侧比较重要

(3)设计UI

  1)拖拽一个Button组件,到对话框上,day2中计算器中“=”号的属性设置按钮。

  使能禁用->修改objectname为m_btnCalc->Text文本改为“=”->修改字体大小,点大小18,加粗

  2)拖拽一个LineEdit组件,修改对象名为m_editX,修改字体大小,粗细。选择右对齐。同类有又右操作数的LineEdit对象。

  3)结果的LineEdit对象要设置为只读。

  4)加入Label的+号

(4)单机空白处,在快捷菜单中点击水平布局按钮,或者右键选择布局方式

(5)修改主对话框标题为“计算器”,修改对象名称

(6)保存UI

 (7)将UI文件转换成C++支持的.h文件,使用uic命令进行转换,如:uic CalculatorDialog.ui -o ui_CalculatorDialog.h//Makefile可完成此功能,可打开查看其内容

  这个自定义的类有两种用法:

    1)由其他类继承  

  把上述头文件中UI命名空间下的计算器类由昨天的计算器类来继承,删除原来的UI初始化,保留槽函数,连接函数等,可完成此前计算器相同的功能

    2)作为类成员

  自行完成

2、《案例》登录框

(1)按上图设置其必要属性,这里强调UI设计时两点:1)调节LineEdit的echoMode,使输入数据不可见。2)调节最小尺寸和最大尺寸的宽度和高度(与当前尺寸下相同),使其不可拉伸

(2)uic将ui文件转换为头文件

(3)编写代码

编写头文件继承LoginDialog或ui_LoginDialog类,可以与前者同名,因为在转换的头文件存在一个名为UI的命名空间。可以查看其关系。

编写类实现文件,需要在子类中调用setupUI函数,初始化UI ,同时在文件中将按钮中的文字改为中文确定和取消(使用button()函数获取buttonBox中的两个按钮指针,它的参数是一个枚举值,例如:QButtonBox::Ok,再使用setText设置其文本)

实现主文件。

(4)构建工程,调试代码

 //类声明文件
#ifndef __LOGINDIALOG__
#define __LOGINDIALOG__

#include<QDialog>
#include<QMessageBox>
#include "ui_LoginDialog.h"

class LoginDialog:public QDialog,public Ui::LoginDialog{
  Q_OBJECT
public:
  LoginDialog();

private slots:
  void onAccepted();//单击组合按钮确定,发送的是accepted信号
  void onRejected();//单击组合按钮取消,发送的是rejected信号
};

#endif
 //类实现文件
#include "LoginDialog.h"
#include<QPushButton>
LoginDialog::LoginDialog()
{
  //初始化界面
  setupUi(this);
  m_btnBox->button(QDialogButtonBox::Ok)->setText("确定");
  m_btnBox->button(QDialogButtonBox::Cancel)->setText("取消");

  connect(m_btnBox,SIGNAL(accepted()),this,SLOT(onAccepted()));
  connect(m_btnBox,SIGNAL(rejected()),this,SLOT(onRejected()));
}

void LoginDialog::onAccepted(){
  //如果输入正确用户名和密码,则登录成功,关闭父窗口
  //输入错误,弹出提示框
  if(m_editUsername->text()=="tarena"&&m_editPasswd->text()=="123456"){
    qDebug("登陆成功");
    close();

}
else{

  QMessageBox msgBox(QMessageBox::Critical,//提示框风格
    windowTitle(),//标题
    "用户名或密码错误",//提示消息
    QMessageBox::Ok,//选择按钮
    this);//父窗口指针

  msgBox.setButtonText(QMessageBox::Ok,"确定");
  msgBox.exec();
}

}

void LoginDialog::onRejected(){
//创建消息提示狂
  QMessageBox msgBox(QMessageBox::Question,//提示框风格
    windowTitle(),//标题
    "确定取消登录吗?",//提示消息
    QMessageBox::No|QMessageBox::Yes,//选择按钮
    this);//父窗口指针
  msgBox.setButtonText(QMessageBox::Yes,"确定");
  msgBox.setButtonText(QMessageBox::No,"取消");
  //点击yes退出父窗口
  if(msgBox.exec()==QMessageBox::Yes){
    close();
}
}
//主文件

#include<QApplication>
#include "LoginDialog.h"

int main(int argc,char** argv){

  QApplication app(argc,argv);

  LoginDialog login;
  login.show();

  return app.exec();

}

三、创造器(qtcreator)

1、《案例》重构前述计算器

(1)终端启动创造器

(2)新建工程,选择Application->在选择Qt widgets Application,创建

(3)输入工程名称,指定创建路径,并且会在此路径下创建一个与工程名相同的目录

(4)设置开发套件,采用默认即可

(5)设置一个类名(这里设置为CalculatorDialog),并选择一个父窗口(基类)

  

注意:

  这一步骤完成后,会自动创建与输入类名对用的头文件,源文件和ui文件,项目文件及项目配置文件

(4)下一步,选择项目管理工具,这里没有,跳过。完成

注意:

  在右侧的影子构建勾选后,会将生成的中间文件存放到设置的文件夹下,如图:

  如果比较简单的工程,可去掉该选项

(5)双击ui文件,进入设计。按前述计算机昨天的计算机设置组件属性

注意:

  ui设计时父窗口对象名不能修改

(6)全选组件  ,再水平布局

(7)右键=号,选择转到槽,可自动生成槽函数声明和定义,手动添加按键使能槽函数(由EditLine内容来使能),并完成连接,只需完成定义内容即可

原文地址:https://www.cnblogs.com/ptfe/p/11318695.html

时间: 2024-08-29 18:37:04

QT-面向对象的QT编程,QT设计师的相关文章

【Qt】2.3 使用Qt设计师来创建对话框

安装完Qt OpenSource之后,在开始菜单目录下会有这几个东西. 其中[Designer]是用来设计窗口界面的程序.所以现在可以使用它来设计一个对话框.在[Qt Creator]中,[设计]这一项里也可以做界面的设计. 打开[Designer],会默认弹出[新建窗体],选择[Dialog without Buttons],这会新建出一个没有任何东西的对话框. [Dialog with Buttons Bottom]和[Dialog with Buttons Right]会创建出包含[确定]

QT笔记(1)--QT编程环境搭建

一.QT简介 Qt  是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程.2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具.2012年,Qt被Digia收购.2014年4月,跨平台集成开发环境Qt Creator 3.1.

Qt on Android 核心编程

Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 444页 16开 编辑推荐 当Qt跨界牵手Android,移动开发会有什么不同?初学者如何借助Qt开发Android应用?跟随CSDN博文大赛冠军foruok进入Qt on Android无秘之旅! 内容提要 <Qt on Android 核心编程>以"从零开始也能学会Qton Andro

《Qt on Android核心编程》勘误

我的第一本技术书籍<Qt on Android核心编程>已经出版上市,书中难免疏漏,存在一些文字和技术上的问题,特记录在此. 本文会不停更新,拿到书的朋友发现问题可以回复本文,我回将问题更新到博文中.提前感谢各位啦. <Qt on Android核心编程>的试读样章在这里,点击下载.购买链接在下面: china-pub 亚马逊 京东1 京东2 淘宝惊喜价 编排说明 本文将结合章节和问题发现的先后顺序来编排,具体是酱紫的:每个章节单列出来作为本文的一节,在该节下按时间顺序列出发现的问

《Qt on Android核心编程》介绍

<Qt on Android核心编程>终于尘埃落定,付梓印刷了. 封面 看看封面的效果吧,历经几版,最终就成了这个样子. 看下封皮: 这是立体版效果: 章节内容简介 第 1 章 欢迎来到Qt的世界,让我们看看Qt是什么,能给我们带来什么,又有谁在使用Qt.我们要约会的Qt on Android,它缘起何处,有着怎样曲折婉转的历史,如今的小模样能否让我们爱之如狂-- 第 2 章 当你遇见了合适的人,开始筹划第一次约会,又是兴奋又是惆怅,要不要买花,去哪里买礼物,穿什么衣服,洒什么香水,带什么应对

《Qt on Android核心编程》预售链接出来了

本人的新书<Qt on Android核心编程>已经由电子工业出版社博文视点出版,目前china-pub正在预售,欢迎关注. 想了解目录的,看这里:<Qt on Android核心编程>目录. 骚情简介在这里:<Qt on Android核心编程>介绍.

QT中的SOCKET编程(QT-2.3.2)

转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 http://hi.baidu.com/landuochong/blog/item/08268100cf5b6783e950cda9.html 操作系统:ARM-LinuxQT版本:QT-2.3.2-FOR-LINUXGUI:Qtopia 在LINUX 下进行网络编程,我们可以使用LINUX提供的统

《Qt on Android核心编程》相关资源

有不少朋友反馈在搭建 Qt on Android 开发环境时遇到了问题,诸如 Android SDK 无法下载. jdk 找不到合适的版本.创建 AVD 出错等等.为此我把与<Qt on Android核心编程>一书配套的相关工具和SDK都打包上传到了百度云上,列在这里供大家下载. 需要说明的是,我的Android SDK和相关工具,都是32位的,也都不是最新的.不过,我在 Qt 5.2.0 ,Qt 5.3.0 , Qt 5.3.1 , Qt 5.4.0 都试过,是可用的. Android N

Qt 多线程和网络编程学习

一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run()函数是在start()函数调用之后开始执行 QMutex类,互斥量/互斥锁,加锁解锁,原子操作 QWaitCondition类,一个线程在一定条件下等待其它线程的唤醒,在此之前一直处于休眠期.QWaitCondition::wakeOne()随机唤醒一个等待的线程,QWaitCondition::

《Qt on Android核心编程》目录

有朋友想看看<Qt on Android核心编程>的目录,So-- 目录 <Qt on Android核心编程>目录,截了10张图才弄好,都在下面了. 内容说明 本书内容基于第一个正式支持 Qt on Android 的 Qt SDK 版本,5.2.0 ,写作过程中 Qt 5.3.0 发布,我调整了部分内容,对有变化的部分作了对应介绍. 从目录可以看出,<Qt on Android核心编程>是从 Qt 的核心概念--元对象系统--讲起的,涵盖了信号与槽.事件.多线程.网