文章目录

  • 背景
  • 过程
    • 新建项目
    • 程序移植
    • 设计图形界面
    • 添加功能
      • 信号和槽
      • 查看信号
      • 绑定信号和槽
      • 需要注意的一些问题
    • 编译和发布应用

背景

这几天遇到一个问题,需要在2、3天之内给一个已经编写好的简单C++命令行程序编写一个简单的图形界面。

由于之前没有接触过图形界面编程,所以不知道能不能搞定。后来询问了一些群友,在群友的推荐下,使用了QT这个框架(他们说MFC的API的设计不太好)。记录一下两三天速成图形界面的过程,希望能给一些想速成图形界面的读者带来帮助。

由于是速成的,而且只花了两三天,所以这篇博客不会包含原理类的东西,比如槽和信号的原理(想要了解原理的请自行学习),而且只使用了简单的控件,比如按钮、文本框等。

QT的安装不做简介,使用的QT的是QT 5.14.1,Community中文版。

过程

新建项目

打开QT Creator,点击左上角的文件->新建文件或项目,在弹出的窗口中选择Qt Widgets Application

在设置Details时,Bass class选择QMainWindow,并且一定要勾选Generate form。其它随意(我这里全部使用默认值)。项目保存的路径里不要有中文

成功创建项目后,大概是这样:

需要用到的是:mainwindow.h(编写代码)、mainwindow.cpp(编写代码)和mainwindow.ui(做界面)文件。

程序移植

由于我的是简单的命令行程序,所以将所有的代码都放到了MainWindow类里,移植时请注意变量生命周期。

设计图形界面

双击“项目”中“Forms文件夹”下的.ui文件,启动QT Designer,然后就可以通过拖拽的方式设计界面了。

默认已经创建了一个内容空白、有状态栏和菜单栏的窗口(状态栏和菜单栏均可以删除),可以从左侧的控件菜单中将控件拖动到窗口里并自由排版。在右下角的属性窗口设置控件的具体属性,在右上角的对象查看器中可以浏览和编辑当前窗体的层次。

我的图形界面只用到了文本输入框(Text Edit)、标签(Label)、文本浏览框(Text Browser)、按钮(Push Button)这四个控件(使用其它控件的步骤也是差不多的),界面如下:

添加功能

信号和槽

设置完界面后,就希望添加各种功能,比如点一下按钮就做开始处理这个,当文本输入框中的文字改变后校验一下文字符不符合要求之类的。要实现这样的功能,就需要用到QT的信号机制,信号是有对象或控件发送的消息,槽可以接受和响应信号,本质上是函数或方法。每个控件都自带了很多信号(也可以自定义,请自行百度),可以自己编写槽函数,将信号绑定到槽函数上。

比如点击按钮然后释放,就会发出clicked信号,可以自己编写一个函数,将这个clicked信号绑定到这个函数上,即可实现点击按钮处理事务的功能。

查看信号

  1. 每个控件都属于一个类,可以到百度上搜索这个类有哪些信号,也可以查阅官方文档。
  2. 可以使用QT Designer查看每个控件拥有的信号(参考博客在下一步)。

绑定信号和槽

参考博客:Qt信号和槽函数的四种实现方式

推荐第三种,使用connect的方法,毕竟可以自定义方法名。

以第三种方法和这个项目为例,介绍一下实现过程:

在QT Designer左上角的对象查看器中的可以查到按钮的对象名为pushButton。假设我现在需要用到该按钮的clicked信号,希望点击按钮后能执行myFunc函数,myFunc函数会对窗口做一系列的操作。

在mainwindow.h的MainWindow类(如果你定义了类名的话就不是这个类了)的定义中添加代码:

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:         //添加void myFunc(void); //添加,没有参数,我写的时候是把要用到的参数都放到了类里private:Ui::MainWindow *ui;
};

在mainwindows.cpp中实现myFuc函数:

void MainWindow::myFunc(void){//总的来说操作窗口控件就是通过指针调用方法。ui->label->setText("111");  //修改Label标签显示的值为111QString inText=ui->textEdit->document()->toPlainText();  //获取Text Edit中的内容(简单文本内容),并保存为Qstring类型QMessageBox::information (NULL,"成功","你成功了!"); //弹出一个自带一个确认按钮的消息框,需要  #include <QMessageBox>
}

在MainWindows类的构造函数中添加:

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(myFunc()));

若需在使用槽函数时传递参数,如果要使用信号自带的参数时,可以参考这篇博客:信号槽如何传递参数。如果想要自定义参数,可以参考这篇博客:Qt中connect函数不能传递参数的两种解决方法。当然也可以把需要用到的数据都保存到类里,然后在执行函数时读取。

需要注意的一些问题

很多控件使用的不是String类型的字符串或char*型的C字符串(比如Label的setText()方法),而是QString类型,这是QT自带的类,用于字符串处理。所以需要进行转换,转换请自行百度。比如这篇:0022:Qt常用类 - QString(01,QString的编码方式和初始化)

编译和发布应用

在QT Creator的左下角可以选择编译器和编译类型,如果是要最终发布,请选择构建类型为Release,然后点击那个锤子形状的图标。

发布应用参考博客:Windows平台上的应用程序发布

使用QT速成C++简单图形界面相关推荐

  1. 一个 QT 程序带你入门图形界面开发

    随着计算机的快速发展,客户对各种应用软件的需求急剧增加.但用户不可能像程序员一样输入各种命令来操作程序,只想通过鼠标点击几下就完成需求.那么这个时候,图形界面就应运而生了. QT 是软件开发领域非常著 ...

  2. VS2019使用EasyX实现简单图形界面功能

    @C语言爱好者 VS使用EasyX图形工具实现"无码高清"图片 代码小白使用EasyX实现简单的自定义图片,话不多说直接上图; 以下是实现源码: #include<graph ...

  3. JAVA-关于计算器的简单图形界面设计例子(不实现功能)

    对于刚刚学习JAVA的小伙伴们来说,对图形界面设计肯定不陌生,我们可以利用javax.swing类库来进行图形界面的简单设计. 下面我们用JAVA图形界面设计的相关基础知识来实现一个简易计算器的界面( ...

  4. termux安装kodbox-方便简单图形界面操作

    用kodbox假装是个图形界面, 方便小白管理文件之类的. 具体操作 1. 安装wget pkg install wget 2. 官网地址下载kodbox最新版本,解压,改权限. wget https ...

  5. python简易图形-python简单图形界面GUI入门——easygui【转】

    原文:https://blog.csdn.net/mingqi1996/article/details/81272621 感觉gui做起来成就感比较高,学完基础语言顺便花一个下午看看GUI设计,现在回 ...

  6. python easygui_python简单图形界面GUI入门——easygui

    首先是easygui包下载,两种方式: 1)在命令行提示符环境下,用pip install easygui直接安装: 2)从http://easygui.sourceforge.net下载.将下载得到 ...

  7. 一个简单图形界面框架XYGui的设计与实现 (一)

    (同步个人博客http://sxysxy.org/blogs/67 到csdn..) 前传 和dram神犇做了个交♂易,我来发布一些关于制作一个Gui库的教程.借用林则徐的两句名言来描述我现在的心情: ...

  8. QT实现minheap(简单图形界面掌握)

    本次项目的文件结构图如下 在windows下的运行效果如图 堆本质上就是平衡二叉树,这里采用的是线段树来实现的.比较简单 但是在使用的QT自带的QTTreeWidget来显示的时候就实现了一个讲线段树 ...

  9. 简单图形界面初学 :tkinter+阿里云接口+爬虫,实现全国天气查询

    可能需要的环境: Python 3.6官网下载 需要下载的第三方库:requests       其余为python自带不需要下载 首先看下效果图 具体写作过程参考b站视频传送门:GUI天气预报 接下 ...

最新文章

  1. PE文件结构详解(三)
  2. python哨兵循环_Python通用循环的构造方法实例分析
  3. ajax async:false不管用_js 网络请求框架 ajax和axios、fetch的区别
  4. 固定在计算机主机箱体上,联结计算机各种部件,起桥梁作用的是,2014年12月计算机应用基础模拟试题...
  5. Redis搭建(二):主从复制
  6. nedc和epa续航里程什么意思_NEDC、WLTP和EPA续航里程标准谁最真实?看比亚迪工程师怎么说...
  7. 巨控 自建服务器,GRM云服务器的Web数据接口.PDF
  8. Vue + SpringBoot跨域
  9. dynamic的一些使用心得
  10. python图片分类毕业设计成果报告书_4period;毕业设计成果报告书
  11. CentOS6.7 SSH安装与配置
  12. OA系统项目实施的难点和解决办法
  13. xss.haozi.me通关记录
  14. 2020亚太数学建模竞赛A题翻译
  15. Pro/E产品设计之绘制齿轮的步骤
  16. 金庸秘笈英汉互译(zz)
  17. Spring Boot与Elasticsearch的对应版本
  18. 内核篇加载内核模块(Android10)
  19. 外挂技术汇总及书籍推荐
  20. display, visibility, overflow 三者的作用与区别

热门文章

  1. 文本转语音TTS(文本阅读和视频配音制作)MP3
  2. [一起来学mysql]-----MySQl的增删改查
  3. mysql添加用户并赋予权限命令
  4. 重磅丨数据+场景双重互联,有米广告完成程序化场景营销升级
  5. 程序员如何规避吃青春饭?【转载】
  6. 【表格设置】HTML中合并单元格,对列组合应用样式,适应各浏览器的内容换行
  7. 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
  8. sketch插件 android,设计师必备的SKetch插件合集
  9. Smart Git Assume Unchanged
  10. bartender打印错误