C++QT教程3——手册4.11.1自带教程(笔记)——创建一个基于Qt Widget的应用程序

文章目录

创建一个基于Qt Widget的应用程序

本教程介绍如何使用Qt Creator创建一个小型Qt应用程序,名为Text Finder。它是Qt UI工具中Text Finder示例的简化版本。应用程序的用户界面是使用Qt Designer通过Qt小部件构建的。应用程序逻辑是通过使用代码编辑器编写的C++代码。

创建Text Finder项目

  1. 选择文件 > 新建文件或项目 > 应用程序 > Qt Widgets应用程序 > 选择。

    打开介绍和项目位置对话框。

  2. 在名称字段中,输入TextFinder。

  3. 在创建位置字段中,输入项目文件的路径。例如,C:\Qt\examples,然后点击下一步(在Windows和Linux上)或继续(在macOS上)。

    打开套件选择对话框。

  4. 选择您的项目的构建和运行套件,然后点击下一步或继续。

    注意:如果在工具 > 选项 > 套件(在Windows和Linux上)或Qt Creator > 首选项 >

    套件(在macOS上)中只指定了一个套件,则会跳过此对话框。

    打开类信息对话框。

  5. 在类名字段中,输入TextFinder作为类名。

  6. 在基类列表中,选择QWidget作为基类类型。

    注意:头文件、源文件和表单文件字段会自动更新以匹配类的名称。

  7. 点击下一步或继续。

    打开项目管理对话框。

  8. 查看项目设置,并点击完成(在Windows和Linux上)或完成(在macOS上)创建项目。

    注意:项目将以编辑模式打开,并隐藏这些说明。要返回到这些说明,请打开帮助模式。

素材文件

TextFinder项目现在包含以下文件:

.h.cpp文件包含了必要的样板代码。.pro文件是完整的。

填补缺失的部分

首先设计用户界面,然后继续填写缺失的代码。最后,添加查找功能。

设计用户界面

  1. 在"项目"视图中以编辑器模式双击打开textfinder.ui文件,启动集成的Qt Designer。
  2. 将以下小部件拖放到表单中:
  • 标签(QLabel)

  • 文本编辑框(QLineEdit)

  • 按钮(QPushButton)

    请注意:要轻松定位小部件,请使用侧边栏顶部的搜索框。例如,要找到标签小部件,开始键入"label"即可。

  1. 双击标签小部件,输入关键词文本。

  2. 双击按钮小部件,输入查找文本。

  3. 在属性窗格中,将对象名称更改为findButton。

  4. 按下Ctrl+A(或Cmd+A)选择小部件,点击水平布局(或在Linux或Windows上按Ctrl+H,或在macOS上按Ctrl+Shift+H)应用水平布局(QHBoxLayout)。

  5. 拖放一个文本编辑框小部件(QTextEdit)到表单中。

  6. 选择屏幕区域,点击垂直布局(或按Ctrl+L)应用垂直布局(QVBoxLayout)。

    应用水平和垂直布局确保应用程序界面适应不同的屏幕尺寸。

  7. 要在用户按下查找按钮时调用查找函数,可以使用Qt的信号和槽机制。当特定事件发生时,会发出一个信号,而槽是响应特定信号的函数。Qt小部件具有预定义的信号和槽,可以直接在Qt Designer中使用。要为查找函数添加一个槽:

    • 右键点击查找按钮以打开上下文菜单。
    • 选择"转到槽"> "clicked()",然后选择"确定"。
      会在头文件textfinder.h中添加一个私有槽on_findButton_clicked(),并在源文件textfinder.cpp中添加一个私有函数TextFinder::on_findButton_clicked()。
  8. 按下Ctrl+S(或Cmd+S)保存更改。

有关使用Qt Designer设计表单的更多信息,请参阅Qt Designer手册。

完成头文件

textfinder.h文件已经有必要的#include,一个构造函数,一个析构函数和Ui对象。你需要添加一个私有函数loadTextFile(),以读取并显示输入文本文件的内容在QTextEdit中。

  1. 在编辑视图的项目窗格中,双击打开textfinder.h文件进行编辑。

  2. 在private部分添加一个私有函数,在Ui::TextFinder指针后面,如下代码片段所示:

    python 复制代码
      private slots:
          void on_findButton_clicked();
    
      private:
          Ui::TextFinder *ui;
          void loadTextFile();

完成源文件

现在头文件已经完成,转到源文件textfinder.cpp。

  1. 在编辑视图的项目窗格中,双击打开textfinder.cpp文件进行编辑。

  2. 添加代码使用QFile加载文本文件,用QTextStream读取,并使用QTextEdit::setPlainText()在textEdit中显示它。如下代码片段所示:

    python 复制代码
      void TextFinder::loadTextFile()
      {
          QFile inputFile(":/input.txt");
          inputFile.open(QIODevice::ReadOnly);
    
          QTextStream in(&inputFile);
          QString line = in.readAll();
          inputFile.close();
    
          ui->textEdit->setPlainText(line);
          QTextCursor cursor = ui->textEdit->textCursor();
          cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
      }
  3. 为了使用QFile和QTextStream,在textfinder.cpp中添加以下#include:

    python 复制代码
      #include <QFile>
      #include <QTextStream>
  4. 对于on_findButton_clicked()槽函数,添加代码提取搜索字符串,并使用QTextEdit::find()函数在文本文件中查找该字符串。如下代码片段所示:

void TextFinder::on_findButton_clicked()

{

QString searchString = ui->lineEdit->text();

ui->textEdit->find(searchString, QTextDocument::FindWholeWords);

}

  1. 一旦这两个函数都完成了,在构造函数中添加一行调用loadTextFile()的代码,如下代码片段所示:

    python 复制代码
      TextFinder::TextFinder(QWidget *parent)
          : QWidget(parent), ui(new Ui::TextFinder)
      {
          ui->setupUi(this);
          loadTextFile();
      }

通过这行代码,在uic生成的ui_textfinder.h文件中会自动调用on_findButton_clicked()槽函数:

python 复制代码
  QMetaObject::connectSlotsByName(TextFinder);

创建资源文件

你需要一个资源文件(.qrc),其中嵌入输入文本文件。输入文件可以是任何带有文本段落的.txt文件。创建一个名为input.txt的文本文件,并将其存储在textfinder文件夹中。

添加资源文件的步骤:

  1. 选择文件 > 新建文件或项目 > Qt > Qt资源文件 > 选择。

    打开"选择位置"对话框。

  2. 在名称字段中输入textfinder。

  3. 在路径字段中,输入C:\Qt\examples\TextFinder,然后点击下一步或继续。

    打开"项目管理"对话框。

  4. 在"添加到项目"字段中,选择TextFinder.pro,然后点击完成或完成以在代码编辑器中打开该文件。

  5. 选择添加 > 添加前缀。

  6. 在前缀字段中,将默认前缀替换为斜杠(/)。

  7. 选择添加 > 添加文件,以定位并添加input.txt。

编译和运行程序

现在你已经拥有了所有必要的文件,点击按钮来编译和运行你的程序。

参考文章

【Qt】Qt创建Qt Qt Widgets项目

用户界面开发框架Qt 6.x入门级教程 - 创建基于Qt Widget的应用(一)

相关推荐
Ljubim.te12 分钟前
软件设计师——数据结构
数据结构·笔记
黑不溜秋的21 分钟前
C++ 语言特性29 - 协程介绍
开发语言·c++
一丝晨光25 分钟前
C++、Ruby和JavaScript
java·开发语言·javascript·c++·python·c·ruby
海绵波波10733 分钟前
Qt操作主/从视图及XML——实例:汽车管理系统
xml·qt·汽车
￴ㅤ￴￴ㅤ9527超级帅39 分钟前
LeetCode hot100---二叉树专题(C++语言)
c++·算法·leetcode
Fairy_sevenseven1 小时前
【二十八】【QT开发应用】模拟WPS Tab
开发语言·qt·wps
_GR1 小时前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
Death2001 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
六点半8881 小时前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法
niu_sama1 小时前
基于muduo库函数实现protobuf协议的通信
开发语言·qt