入门项目:使用vs2015和Qt Creator制作文本编辑器
考虑到许多代码使用vs调试比较方便(而且习惯),但是有一些功能用vs的扩展工具里面又没有,于是可以将二者结合一起来开发。
一.如何同时使用Qt creator与vs2015
方法一 使用Qt creator创建项目
先在Qr Creator新建一个项目
文件结构如下:
使用vs安装的插件打开.pro文件
保存即可
这样就可以同时使用vs和qt creator同时编辑项目了。
方法二 使用vs创建项目
vs创建好项目后,使用插件生成pro文件,然后使用Qt creator打开.pro文件即可。
二.设计过程
2.1 设计目标
制作一个文本编辑器
2.2 添加资源文件
资源文件可以在网盘中下载
链接:https://pan.baidu.com/s/1XZl1y2nbA3Sgnxz8BGEtZg
提取码:si4p
在Qt Creator中点击FIle->open file or object,然后选择Qt栏下选择Qt Resource File,添加即可
在项目文件下新建一个文件夹,存放资源图片
添加文件即可
2.3 设计Action
在QT creator中双击.ui文件进入Qt Designer
新建Action
添加action填写text,对象名称,提示(鼠标悬停显示),图标,快捷键和cleckable
依次添加以下action
2.4 设计菜单、工具栏、输入框
双击Type Here编辑菜单栏,输入分组名称,然后回车,新建下个分组
依次添加 文件、编辑、格式
然后将Action拖放到菜单的某个分组下
设计工具栏,直接将action拖入工具栏即可
工具栏可以设置显示属性,可在属性窗口中设置
- Qt::ToolButtonIconOnly———只显示图标
- Qt::ToolButtonTextOnly———只显示文字
- Qt::ToolButtonTextBesideIcon————图标旁显示文字
- Qt::ToolButtonTextUnerIcon————图标下显示文字
- Qt::ToolButtonFollowStyle———根据QStyle::StyleHint格式显示
添加输入框,拖入即可
添加后,调整文本框大小
将文本框对象命名为txtEdit
此时可以尝试编译运行一下看下效果
如果出现中文乱码,在.h文件中加上如下语句即可
1 |
2.5 代码创建其他界面组件
我们还需要在工具栏上增加一个SpinBox用于设置字体大小,但是无法通过拖动组件实现,这便是UI设计器的局限性,某些界面效果无法用可视化设计方式实现。
在.h文件中增加一些变量和函数定义
1 |
|
在.cpp(不是main.cpp)中修改构造函数
1 | TextEdit::TextEdit(QWidget *parent) |
在.cpp(不是main.cpp)中定义iniUI()
1 | void TextEdit::iniUI() |
这时编译运行后显示的效果。
2.6 Action的功能实现
① 编辑功能Action的实现
用于编辑的Action有剪切、复制、粘贴的功能,QTextEdit类有相应的槽函数,顾可以直接使用UI界面设计
添加后如下
② 其他Action的功能实现
用于设置粗体、斜体和下划线的3个Action具有Checkable数学,选择trigger(bool)信号设计槽函数更合适,该信号的复选状态会作为一个参数传递,在响应代码里可以直接使用。
右击需要设置trigger(bool),选择go to slot(需要在Qt Creator中,vs中的插件没有该选项)
选择trigger(bool)
点击OK后会跳转到.cpp,编写槽函数
设置粗体
1 | void MainWindow::on_actFontBold_triggered(bool checked) |
设置斜体
1 | void MainWindow::on_actFontItalic_triggered(bool checked) |
设置下划线
1 | void MainWindow::on_actFontUnder_triggered(bool checked) |
为了使界面的程序的功能更加智能一点,我们需要根据文本的格式来更新action的状态。选择文本编辑框,右击进入“go to slot”,可以利用其信号。
- copyAvailable(bool)信号在有内容可以被复制时发射,可以用来改变actCut、actCopy的enable属性
- selectionChanged()信号在选择的文字发生变化时发射,利用该信号,当有信号发射时,读取此时字体的属性,从而更新粗体、斜体、下划线的checked属性
代码如下
1 | void MainWindow::on_txtEdit_copyAvailable(bool b) |
2.7 手工创建的组件的信号与槽
设置字体大小的spinFontSize和设置字体comboFont的信号和槽的功能的实现显然不能通过可视化的方法实现,所以需要通过手工便携槽函数,并将信号和槽关联起来。
在.h中类的定义中增加两个槽函数,以及用于信号和槽关联的函数,如下所示
1 | class MainWindow : public QMainWindow |
在.cpp文件中定义槽关联函数
1 | void MainWindow::iniSignalSlots() |
再在.cpp文件中定义槽函数
1 | void MainWindow::on_spinFontSize_valueChanged(int aFontSize) |
还需要在.cpp中类的构造函数中调用槽关联函数
1 | MainWindow::MainWindow(QWidget *parent) |
2.8 为应用程序设置图标
- 将一个图标文件(.ico后缀的图标文件)复制到项目原程序目录下
- 在.pro项目配置文件最后加上一行
1 | RC_ICONS=AppIcon.ico |
完结撒花~