Qt写一个hello world

Qt写一个hello world

创建一个项目

  • 先新建项目

请添加图片描述

  • 选择开发方法

请添加图片描述

  • 修改名称,点击下一步
    请添加图片描述

  • 设置构建工具,CMake很多的项目都有使用,qmake是QT老牌的构建工具,也是以qmake为欸住,Qbs是新一代的构建工具,但是用的人很少,后来QT官方也很少维护了
    请添加图片描述

  • 使用Qt Creator创建项目会自动生成一些代码出来,生成的代码里就包括一些类,这是在选择父类是谁。

    • QMainWindows是完整的应用程序窗口,包括菜单栏、工具栏、状态栏等等;
    • QWidget是一个小部件,窗口上一个具体元素。输入框、按钮等等;
    • QDialog表示一个对话框。
    • 我们简单的开发,选择QWidget即可,此处生成文件名和类名相关联(非强制,可修改);
    • 这里的form file十分关键,Qt创建图形化界面可以通过代码也可以通过图形化方式。通过form file,就可以用图形化方式生成界面了。form file会记录你图形化生成界面的操作,在编译时生成更新好的ui_widget.h文件,父类ui包含你操作的信息的类,然后你的main函数继承ui,就可以有之前的操作了。

    Qt内置的类都是以Q前缀开头的。
    请添加图片描述

  • 下一步选择语言,我们直接下一步即可,这一步和国际化相关;

  • 下一步选择基于哪个编译器的Qt SDK构建代码,直接选择Desktop Qt那个即可;

  • 最后一步选择代码上传的地方,可以选的gitee等仓库,也可以选择None。
    请添加图片描述

  • 我们点击这个,就可以进入图形化设计的界面了
    请添加图片描述

  • 回来,我们能看到ui是xml写的。点击左下角第一个绿色小箭头运行,开始查看form file生成的ui_widget.h文件
    请添加图片描述

  • 然后点击上级目录,出现一个build开头的文件,打开,发现有一个ui_widget.h文件,你可以拖拽到Qt界面上,就可以看这个Qt form file生成的文件了。可以结合后续操作,查看不同操作对生成的这个头文件有什么影响。

  • 你打开这个.pro文件,会发现他会维护文件夹的基本信息,到时候生成构建工具依靠.pro生成文件

用Label写hello world

代码

代码会写在widget.hpp中

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>			// QLabel类的头文件,Qt的大部分头文件都和类名一样

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLabel* label = new QLabel(this);		// 创建对象,这个this是为了构建对象树,把生命周期与对象树绑定,这样你就不用主动析构了。如果你主动析构,运行到析构的部分,窗口内容就消失了,应该在窗口关闭的时候再析构对象,这明显更合理。完成这一操作的方法就是构建对象树。窗口关闭的时候,从上往下依次自动析构。(你可以创建一个类,继承QWidget,析构函数打印日志,验证这一结论)
    label->setText("hello world!");			// 填充内容,这里包含字符串->QString的类型转换。QString是Qt自己创建的String类,也包含了编码格式的修改,相比std标准库更好用些,而且在Qt退出一套自己的STL类之前,cpp没有标准。所以为了兼容,这一套STL也就延续下来使用了。
}

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

上文提到自己创建打印日志,Qt提供了qDebug() << 操作,可以解决编码问题,防止汉字乱码问题。头文件<QDebug>

图形化界面

  • 点击上文提到的widget.ui文件,下拉到Display Widgets,找到Laber,拖拽到右侧,修改文本框内容为“hello world”,就可以运行了。
  • 简单介绍一下这个图形化设计的ui内容,正中央上侧,你可以拖拽去设计,右上角是类的关系,右下角包含你的操作创建的类的属性,包括像素点位置,字体,类的名字。这楼里你可以直接修改值,这里的信息会由form file写到ui_widget.h的文件里,然后运行出来。

用编辑框写hello world

编辑框和上文Label很像

代码

#include "widget.h"
#include "ui_widget.h"
#include <QLineEdit>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLineEdit* edit = new QLineEdit(this);
    edit->setText("hello world");
}

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

图形化界面

  • 这次移动的是Input Widget -> line edit

用按钮写hello world交互

图形化界面

  • 选择ui中的Button->push Button,拖拽,修改文本

  • 回应上文,我们在运行后,查看ui_widget.h文件,发现其多了一个成员,这个成员就是咱们拖拽的按钮的类
    请添加图片描述

  • 这个按钮没有交互,我们现在写关于交互的代码。上文已经根据form file 创建好按钮类了,我们直接处理点击请求即可。

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
        // 把点击操作和函数连接起来
    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::handleClick);

}

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

// 这个函数来处理点击操作
void Widget::handleClick()
{
    // 访问ui成员
    if(ui->pushButton->text() == QString("hello world"))
    {
        ui->pushButton->setText("hello qt");
    }
    else
    {
        ui->pushButton->setText("hello world");
    }
}

代码

纯代码实现,上文我们通过图形化界面创建的类,这次我们要自己创建类,为了让处理点击的操作能访问到按钮,我们可以把按钮类创建在Widget成员里

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void handleClick();
private:
    Ui::Widget *ui;
    QPushButton* myButton;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    myButton = new QPushButton(this);
    ui->setupUi(this);
    connect(myButton, &QPushButton::clicked, this, &Widget::handleClick);

}

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

void Widget::handleClick()
{
    if(myButton->text() == QString("hello world"))
    {
        myButton->setText("hello qt");
    }
    else
    {
        myButton->setText("hello world");
    }
}

<think>嗯,用户让我介绍如何用Qt一个Hello World程序,我需要用中文回答。首先,我得确定用户对Qt的了解程度。可能是个刚入门的开发者,或者只是想快速看看Qt的效果。我应该从最基础的步骤开始,避免假设他们已经有太多背景知识。 首先,安装Qt。用户可能需要知道如何获取和安装Qt Creator,特别是跨平台的情况。要提一下Qt官网和安装时的组件选择,尤其是MinGW或者MSVC这些编译器,不过可能不需要太深入,避免让新手感到困惑。 接下来是创建项目。Qt Creator的界面可能对新手来说有点复杂,所以需要一步步引导:新建项目,选择Qt Widgets应用,然后命名和选择路径。需要解释每个步骤的作用,比如项目模板的作用,这样用户不会只是机械地操作。 然后是设计界面部分。用户可能需要两种方法:代码实现和Qt Designer。对于Hello World,代码实现可能更直接,但提到Designer也是有帮助的,让用户知道有可视化工具可用。在代码部分,需要解释如何修改main.cpp和.pro文件,特别是QLabel的创建和窗口设置。 对于Designer的方法,要简单说明如何拖拽控件和设置属性,这样用户可以根据自己的喜好选择方法。同时,提醒编译和运行的步骤,包括构建按钮的位置和可能遇到的问题,比如环境配置。 可能用户会遇到的问题,比如没有正确安装组件,或者编译错误,这时候应该给出一些排查建议,比如检查控制台输出,或者安装必要的工具链。最后,总结一下步骤,确保用户有一个清晰的流程概念,并鼓励他们进一步学习Qt的其他功能。 还要注意使用简洁明了的语言,避免技术术语过多,必要时进行解释。比如解释.pro文件的作用,QLabel是什么,这样新手也能跟上。同时,代码示例要准确,确保用户复制后能够顺利运行,避免拼错误或遗漏关键步骤。 最后,考虑用户可能有不同的操作系统,比如Windows、macOS或Linux,所以在安装步骤中提到跨平台特性,但具体操作可能略有不同,不过Qt Creator的界面大体一致,所以不需要分系统详细说明,除非用户特别询问。 总之,步骤需要详细但不过于冗长,重点放在Hello World的实现上,让用户快速看到结果,增强学习的成就感。同时提供后续学习的资源方向,比如Qt的文档和教程,帮助他们继续深入学习。</think>以下是用 Qt一个简单 "Hello World" 程序的步骤指南: --- ### **1. 安装 Qt** - 访问 [Qt 官网](https://www.qt.io/) 下载 Qt 安装程序(推荐使用 **Qt Creator** 集成开发环境)。 - 安装时勾选 `Qt Widgets`(用于桌面 GUI 开发)和适合你系统的编译器(如 `MinGW` 或 `MSVC`)。 --- ### **2. 创建新项目** 1. 打开 **Qt Creator**,点击 `File -> New Project`。 2. 选择模板:`Application (Qt) -> Qt Widgets Application`。 3. 输入项目名称(如 `HelloWorld`)并选择保存路径。 4. 按默认配置完成项目创建。 --- ### **3. 编代码** #### **方法一:纯代码实现** 1. 打开 `main.cpp` 文件,修改代码如下: ```cpp #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("Hello World!"); // 创建一个显示文本的标签 label.setWindowTitle("Qt Demo"); // 设置窗口标题 label.resize(200, 100); // 设置窗口大小 label.show(); // 显示窗口 return app.exec(); // 进入主事件循环 } ``` #### **方法二:使用 Qt Designer(可视化设计)** 1. 双击项目中的 `.ui` 文件(如 `mainwindow.ui`)打开设计界面。 2. 从左侧控件栏拖拽一个 `Label` 控件到窗口中。 3. 在右侧属性编辑器中设置 `Label` 的文本为 `Hello World!`。 4. 保存后直接编译运行即可。 --- ### **4. 编译运行** - 点击 Qt Creator 左下角的绿色三角形(▶️)按钮编译并运行程序。 - 你会看到一个显示 "Hello World!" 的窗口。 --- ### **5. 关键代码解释** - **`QApplication`**: Qt 应用程序的核心管理类。 - **`QLabel`**: 用于显示文本或图像的控件。 - **`app.exec()`**: 启动 Qt 的事件循环,等待用户交互。 --- ### **可能遇到的问题** 1. **编译错误**:确保安装时勾选了正确的编译器。 2. **中文乱码**:在代码中设置字符串编码(需在 `.pro` 文件中添 `QT += core gui` 并启用 UTF-8)。 3. **窗口不显示**:检查是否漏了 `show()` 方法。 --- ### **扩展学习** - 学习 Qt 的布局管理(Layouts)和信号槽(Signals & Slots)机制。 - 探索更多控件:按钮(`QPushButton`)、输入(`QLineEdit`)等。 如果需要更详细的步骤或代码示例,可以进一步说明你的开发环境(如操作系统、Qt 版本)! 🚀
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值