Ubuntu下Qt编程,从QT的安装到编写notepad

简介: Ubuntu下Qt编程,从QT的安装到编写notepad

1、下载

官网下载可能较慢这里使用清华镜像源来下载,下载链接

我这里下载的是5.12.9的版本,如果有其他版本需求可以跳转到其他目录下载即可

2、安装

下载完成后打开终端进入到下载目录,执行ls指令可以看到我们下载的文件

然后我们设置安装所需要的文件权限

sudo chmod u+x qt-opensource-linux-x64-5.12.9.run 

然后就可以开始安装了执行.run文件会弹出安装界面

下一步登录qt账号密码

勾选同意开源协议然后下一步

然后是设置安装目录,建议在自己的工作目录新建一个QT文件夹来进行安装,然后选择要安装的组件

然后就是等待安装完成了,到了这一步QT设计师软件已经可以打开了,但是再编写我们程序之前还需要下一个步骤。

3、安装lib库

进行玩上一个安装步骤完成后编译第一个项目会出现cannt find -IGL问题,是因为没有按照libGL库,执行以下命令

sudo apt-get install libgl1-mesa-dev

Ubuntu一般都是带有gcc编译器的,如果实在没有g++编译器的还需要安装一下g++编译器

sudo apt-get install g++

到了这里其实就可以开始我们的代码之旅了

4、新建工程

项目名称和项目路径不能带有中文

基类一定要选择mainwindow因为我们待会儿会用到菜单栏这个功能,UI也最好创建一个可以更加直观的看见自己的界面效果

然后基本就是下一步下一步就好了

然后点击编译,基本就表示没有问题了

5、编辑菜单栏

然后我们来设计页面

首先添加一个文本编辑框,然后布局(要点击没有控件的地方再布局)

然后我们来添加菜单栏

然后我们ctrl+r试一下

有的小伙伴可能上方不会出现菜单栏,这是因为Ubuntu设置的原因我们需要设置一下,在系统设置中外观-行为

这样就可以解决没有菜单栏的问题了,下面开始编写我们的代码了

6、Qt文件操作

我们可以在这里先设置一下快捷键例如我们常见的ctrl+o打开文件ctrl+s保存文件,这个根据自己需求来,然后我们再右击他点击转为槽,信号选择默认的triggered就号好。

然后我们再.h文件中添加这三个头文件

#include <QMessageBox>
#include <QFileDialog>
#include <QTextStream>

槽函数转换完成在.h文件应该有以下声明(编译器自动生成的)

private slots:
    void on_actionnew_file_triggered();
    void on_actionMe_triggered();
    void on_actionopen_file_triggered();
    void on_actionsave_file_triggered();
    void on_actionsave_as_file_triggered();

然后开始编写我们的槽函数代码

6.1打开文件

/***  open file  ***/
void MainWindow::on_actionopen_file_triggered()
{
    filepath = file->getOpenFileName(this,"选择一个文本文件","./","*.txt *.c *.cpp *.h");
    /* 打开文件 */
    QFile fp(filepath);
    if( !fp.open(QIODevice::ReadWrite))
    {
        QMessageBox box(QMessageBox::NoIcon,"提示","文件读取失败");
        box.setStandardButtons (QMessageBox::Ok);
        box.setButtonText (QMessageBox::Ok,QString("确定"));
        box.exec();
    }else
    {
        ui->textEdit->append(fp.readAll());
    }
}

6.2新建文件

/*** new file ***/
void MainWindow::on_actionnew_file_triggered()
{
    QFileDialog fileDialog;
    QString fileName = fileDialog.getSaveFileName(this,"New File","./","*.txt *.c *.cpp *.h");
    if(fileName == "")
    {
        return;
    }
    QFile file(fileName);
    if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QMessageBox::warning(this,"error","new file error!");
        return;
    }
    else
    {
        QTextStream outText(&file);
        QString str = ui->textEdit->toPlainText();
        outText<<str;
        file.close();
    }
}

6.3保存文件

/*** save file ***/
void MainWindow::on_actionsave_file_triggered()
{
    /* 打开文件 */
    if(filepath.isNull())
    {
        on_actionsave_as_file_triggered();
        return;
    }
    else
    {
        QFile fp(filepath);
        if( !fp.open(QIODevice::ReadWrite))
        {
            QMessageBox box(QMessageBox::NoIcon,"提示","文件读取失败");
            box.setStandardButtons (QMessageBox::Ok);
            box.setButtonText (QMessageBox::Ok,QString("确定"));
            box.exec();
        }else
        {
            QTextStream outText(&fp);
            QString str = ui->textEdit->toPlainText();
            outText << str;
        }
    }
}

7.4另存为

/*** save as file ***/
void MainWindow::on_actionsave_as_file_triggered()
{
    QFileDialog fileDialog;
    filepath = fileDialog.getSaveFileName(this,"Save File name","./","*.txt *.c *.cpp *.h");
    if(filepath == "")
    {
        return;
    }
    QFile file(filepath);
    if(!file.open(QIODevice::ReadWrite))
    {
        QMessageBox::warning(this,"error","open file failure!");
        return;
    }
    else
    {
        QTextStream outText(&file);
        QString str = ui->textEdit->toPlainText();
        outText<<str;
        file.close();
    }
}

然后我们再添加一个about吧,这样显得专业一点

/***  about  ***/
void MainWindow::on_actionMe_triggered()
{
    QMessageBox box(QMessageBox::NoIcon,"About","Welcome to the text editor");
    box.setStandardButtons (QMessageBox::Ok|QMessageBox::No);
    box.setButtonText(QMessageBox::Ok, QString("OK"));
    box.setButtonText(QMessageBox::No, QString("EXIT?"));
    if (box.exec() == QMessageBox::No)
    {
        this->close();
    }
}

然后我们CTRL+R运行看一下效果

效果不错,快捷键也可以正常使用,然后我们试一试qt的跨平台功能直接把工程放在windows上跑一下试试。

8、在windows运行

这里会提示切换kits,切换以下就好了,会提示的

运行是没有问题的,就是这个画面有点丑还是需要美化。

9、总结

本章主要完成了qt再Linux上的安装及新建工程的使用,还编写了第一个跨平台的应用notepad,知识点包含了菜单栏、qt文件操作。

相关文章
在Ubuntu上安装MEAN Stack的4个步骤
本指南介绍了在Ubuntu上安装MEAN Stack的四个步骤。MEAN Stack是一种基于JavaScript的开发堆栈,包含MongoDB、ExpressJS、AngularJS和NodeJS。步骤包括:1. 更新系统并准备安装MEAN;2. 从官方源安装最新版MongoDB;3. 安装NodeJS、Git和NPM;4. 克隆mean.io仓库并使用NPM安装剩余依赖项。通过这些步骤,您可以快速搭建基于MEAN Stack的应用开发环境。
29 2
在Ubuntu下安装Debian包:dpkg与apt命令的深度解构。
安装Debian包的知识,就像掌握了海上的航行技术,虽然起初会让人感到陌生甚至困惑,但只要你积累熟练,就能在Ubuntu的世界里畅游无阻。就像每一位成功的航海家,掌握好这些工具,去探索属于你的Ubuntu新世界吧!
55 21
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
29 16
|
10天前
|
Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式
通过这个过程,用户不仅可以定制自己的桌面外观,还可以学习到更多关于 Linux 系统管理的知识,从而更好地掌握系统配置和主题管理的技巧。
47 12
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
160 25
在 Ubuntu 20.04 上安装和配置 Redis
在 Ubuntu 20.04 上安装和配置 Redis 的步骤如下:首先更新系统包,然后通过 `apt` 安装 Redis。安装后,启用并启动 Redis 服务,检查其运行状态。可选配置包括修改绑定 IP、端口等,并确保防火墙设置允许外部访问。最后,使用 `redis-cli` 测试 Redis 功能,如设置和获取键值对。
32 1
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
413 15
如何在Ubuntu 20.04系统中安装Docker
安装 Docker 引擎的步骤如下:首先更新系统包索引 (`sudo apt update`),安装必要依赖包 (`apt-transport-https` 等),添加 Docker 官方 GPG 密钥及 APT 仓库。接着再次更新包索引并安装 Docker 引擎及相关工具 (`docker-ce` 等)。最后启动 Docker 服务并设置开机自启,通过 `docker --version` 和运行测试容器 (`sudo docker run hello-world`) 验证安装是否成功。
141 0
OS-Copilot-ubuntu镜像版本的具体测试使用(安装方式有单独注明)
作为一名个人开发者,我主要负责云资源的运维和管理。在使用OS Copilot的过程中,我遇到了一些配置问题,特别是在ECS实例中设置AccessKey时,但最终成功解决了。通过使用OS Copilot的-t/-f/管道功能,我大大提升了效率,减少了命令编写的工作量,特别是在搭建Java运行环境时效果显著。此外,| 功能帮助我快速理解文档,整体体验非常流畅,推荐给其他开发者使用。
74 6
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等