在Qt中如何简单设计一个文件和图像浏览器

devtools/2024/10/22 18:26:45/

文本浏览器

        设计一个文本浏览器程序,可以打开、显示 txt、html等文件

 1.在Qt Designer中设计一个菜单其中包含打开和退出选项:

2. 在 QMainWindow 构造函数中把 textBrower 设为主窗口的中心部件,这样整个窗口就成了包含 textBrower 的单文档窗口了。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->setCentralWidget(ui->textBrowser);
}

 3.在打开菜单响应操作中选择文件,读取文件,并将文件输出到 textBrower 部件中:

void MainWindow::on_actionopen_triggered()
{QString fileName=QFileDialog::getOpenFileName(this,tr("open Files"),"",tr("Files(* .txt *.cpp *.h *.html * .htm)"));QFile myFile(fileName);if(!myFile.open (QIODevice::ReadOnly | QIODevice::Text))return;QTextStream in(&myFile);QString m_Text=in.readAll();if (fileName .endsWith ("htm")||fileName.endsWith("html")){ui->textBrowser->setHtml(m_Text);}elseui->textBrowser->setPlainText(m_Text);
}

 4.编译运行一下,可以看到很少的代码,实现了很实用的功能。这就是 Qt 设计语言的魅力。


图像浏览器

1.第一步和上节一样,在Form中,用Graphics View来替换textBrower。

2.在头文件中添加QGraphicsScene对象:

QGraphicsScene* scene;

3.在构造函数中,为 graphicsView 设置场景,并作为主窗口中心部件:

scene = new QGraphicsScene();
ui->graphicsView->setScene(scene);
ui->graphicsView->show();
this->setCentralWidget(ui->graphicsView);
showMaximized();

 4.修改“打开”响应菜单,添加以下代码,在 Graphics View 中显示图像:

void MainWindow::on_actionopen_triggered()
{QString fileName=QFileDialog::getOpenFileName(this,tr("open Image"),"",tr("Image riles(* .png * .jpg x .bmp)"));QPixmap myImage,myImage2;myImage.load(fileName);myImage2=myImage.scaled(ui->graphicsView->width(),ui->graphicsView->height(),Qt::KeepAspectRatio,Qt::FastTransformation);scene->clear();scene->addPixmap(myImage2);
}

5.编译运行,打开图片:


感谢各位的阅读!! 


http://www.ppmy.cn/devtools/20237.html

相关文章

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表,用于存储元素,并且按照先进先出(First In First Out)的顺序进行管理,这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型:只允许在一端进行插入数据的操作&#xff0c…

Vue3+vite优化基础架构(1)--- 使用unplugin-vue-components

Vue3vite优化基础架构(1)--- 使用unplugin-vue-components 说明安装unplugin-vue-componentsvite.config.js中使用unplugin-vue-components/vite 说明 这里记录下自己在Vue3vite的项目使用unplugin-vue-components/vite来自定义组件自动全局引入svg雪碧…

OceanBase 分布式数据库【信创/国产化】- OceanBase 与 MySql 兼容性对比

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 与 MySql 兼容性对比前言OceanBase 数据更新架构OceanBase 与 MySql 兼容性对比OceanBase 数据类型SQL 语法过程性语言OceanBase 支持的字符集OceanBase 存储引擎OceanBase 分区支持OceanBase…

C++orm使用插曲——MySQL保留字

近日开始对数据库开始涉猎,在编写数据库操作类调试过程中遇到一个问题: mysql> select * from environmental_variable_table where keytemperature AND dev_ip192.168.1.1; 1064 - You have an error in your SQL syntax; check the manual that co…

k8s部署alertmanager

修改alertmanager-pvc.yaml文件中的信息&#xff0c;然后应用YAML文件 cat > /opt/k8s/alertmanager/alertmanager-pvc.yaml <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata:name: alertmanager-data-pvc spec:accessModes:- ReadWriteManystorageClass…

记一次线上日志堆栈不打印问题排查(附:高并发系统日志打印方案可收藏)

目录 一.线上的日志堆栈不打印了二.一步一步仔细排查三.最后搞定四.聊一聊线上日志到底应该怎么打印4.1 日志打印的诉求4.2 常见的系统日志上报方案4.2.1 ELK 方案4.2.2 自定义log appender 完成应用日志采集. 4.3 日志常见框架傻傻分不清4.4 日志在高并发系统中需要注意的 tip…

STM32之串口中断接收丢失数据

五六年没搞STM32了&#xff0c;这个项目一切都挺顺利&#xff0c;万万没想到被串口接收中断恶心到了。遇到的问题很奇怪 HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], LCD_UART_LEN); 这个代码中 LCD_UART_LEN1的时候&#xff0c;接收过来的数据&#xff0c;数…

(学习日记)2024.05.03:UCOSIII第五十七节:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…