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文件操作。

相关文章
基于jeecgboot的flowable流程按照条件进行流转的例子
基于jeecgboot的flowable流程按照条件进行流转的例子
838 1
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
消息中间件 NoSQL 安全
WePush 一款基于模拟点击实现的微信消息推送机器人,安全稳定不封号
WePush 是一个基于微信 Windows 客户端开发的消息推送系统,采用模拟人工点击技术实现消息发送,具有安全稳定、零封号风险的特点。系统通过 HTTP API 接收消息请求并利用 Redis 消息队列异步处理任务,支持群聊和个人消息推送。依赖 FastAPI、wxauto 和 Redis,适用于系统监控提醒等场景,需使用指定版本微信客户端运行。
2252 60
|
监控 数据挖掘 Linux
Linux服务器PBS任务队列作业提交脚本的使用方法
【8月更文挑战第21天】在Linux服务器环境中,PBS任务队列能高效管理及调度计算任务。首先需理解基本概念:作业是在服务器上执行的任务;队列则是等待执行任务的列表,具有不同的资源限制与优先级;节点指分配给作业的计算资源。
2736 4
|
Apache
基于apache集合工具包的并集、交集、差集工具类
基于apache集合工具包的并集、交集、差集工具类
474 1
qt4.8.7 源码在win7+vs2010环境的x64编译(qt 64位)
qt4.8.7 源码在win7+vs2010环境的x64编译(qt 64位)
1049 0
|
Unix Linux Windows
Linux 系统目录结构
这篇文章详细解释了Linux系统目录结构,重点介绍了/etc目录存放系统配置文件,/root为管理员主目录,/usr存放应用程序和共享资源,/var存放日志等变动文件,以及/home、/boot等目录的作用。
Linux 系统目录结构
|
XML 数据库 Android开发
android 修改默认APN
android 修改默认APN
1219 0
|
数据挖掘 测试技术 项目管理
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的敏捷测试解决方案,如同步在线离线测试用例、流程化管理缺陷、低代码接口自动化测试和 CI/CD,以及基于迭代的测试管理和测试用时的成本计算等,践行敏捷测试。
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案

热门文章

最新文章