首页 > 编程语言 >Qt/C++开发经验小技巧296-300

Qt/C++开发经验小技巧296-300

时间:2024-07-02 12:58:23浏览次数:1  
标签:Qt 300 jpg setCurrent QDir C++ 设置 环境变量

  1. 使用QDir::setCurrent设置当前目录后,会影响程序中的所有相对目录的执行,导致可能的意外发生,一般相对目录都默认是可执行文件所在目录,所以如果程序中为了特殊处理临时调用了QDir::setCurrent设置过相对目录,建议处理完成以后立即切换回来。
QDir::setCurrent("f:/");
QImage img(":/image/bg_novideo.png");
//结果图片保存在f:/1.jpg
img.save("1.jpg", "jpg");
img.save("./1.jpg", "jpg");

//下面是正确做法
//先记住之前的目录
QString path = QDir::currentPath();
QDir::setCurrent("f:/");
xxxxxxx执行任务

//重新设置回默认目录
QDir::setCurrent(path);
//结果图片保存在当前目录下
img.save("1.jpg", "jpg");
  1. 大概从Qt6.4开始,如果项目中同时使用了QOpenGLWidget和QWebEngine浏览器控件,可能会出现QWebEngine加载网页黑屏的情况,6.4.3和6.5.3版本必现。根据官网的描述https://doc.qt.io/qt-6/qquickwidget.html#graphics-api-support ,你需要额外加一行代码。
#include "qquickwindow.h"
int main(int argc, char *argv[])
{
    QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
    QApplication a(argc, argv);
}
  1. 现在现在新版的Qt都是需要在线下载,有时候下载到中途过程会遇到提示下载错误,很可能是部分插件模块对应服务器没有打包导致的,一般都是一些末尾带TP字样的模块,这些模块一般也不会用,所以如果想要安装成功,你需要到选择Qt版本和插件的地方,打开Additional Libraries节点,将那些用不上的尤其是TP结尾的都不勾选,再安装即可。

  2. Qt中可以通过qputenv和qgetenv来设置和获取系统环境变量,既可以在代码中设置对应的值,也可以在系统环境变量中设置,比如windows系统环境变量中设置,相当于可以自定义字符串指定值,这样灵活性大大增强,有时候因为代码不能修改了,可以尝试去设置一个Qt认识的环境变量字符串值来产生效果。这里要特别提示的是,环境变量设置后一定要生效才能正常读取到,比如xp系统设置后可能要重启操作系统才能生效,还有一个是要重启QtCreator才能识别到最新的环境变量,可能是做了缓存机制。

//设置每个窗口都有独立的句柄
QApplication a(argc, argv);
a.setAttribute(Qt::AA_NativeWindows);

//上面的方法是通过代码的方式设置/有时候已经是可执行文件/无法修改代码
//经过查阅代码得知会优先通过qgetenv读取是否有QT_USE_NATIVE_WINDOWS标志
//如果存在则按照QT_USE_NATIVE_WINDOWS变量的值进行赋值
//这种方法有个缺点/就是所有的Qt程序都会应用
  1. 布局的setContentsMargins函数参数依次是左上右下,而qss中的margin依次是上右下左,很多人混搞混。

标签:Qt,300,jpg,setCurrent,QDir,C++,设置,环境变量
From: https://www.cnblogs.com/feiyangqingyun/p/18279687

相关文章

  • C++:类与面向对象&static和this关键字&其他关键字
    类与面向对象struct和class(1)struct是C中用户自定义类型,主要功能是对功能相关数据的封装(2)struct不能直接封装函数,但可以通过封装函数指针来间接封装函数(3)struct就是class的初级阶段,class在struct基础上做了很多扩展,便有了面向对象访问权限(1)类是对数据(成员变......
  • 深入理解 C++11 多线程编程:从入门到实践
    C++多线程编程是指使用C++提供的多线程库来并行执行代码块,从而提高程序的性能和响应能力。C++11标准引入了多线程支持,使得在C++中进行多线程编程变得更加容易和直观。以下是C++多线程编程的基本知识,并附有例子代码。多线程的基本概念线程(Thread):线程是进程中的一个执......
  • C/C++ 赋值表达式注意事项
    在C/C++中,赋值表达式是基础且关键的一部分,它用于给变量赋值。理解和正确使用赋值表达式对于编写有效、可维护的代码至关重要。以下是一些关于C/C++赋值表达式的注意事项:赋值操作符:在C/C++中,赋值是通过赋值操作符=完成的。这意味着将右侧的值或表达式的结果赋给左侧的变......
  • C#、C++和C的不同之处
    目录什么是C语言?什么是C++?什么是C#?主要不同C与C++C++与C#C与C#什么是C语言?我们先从C语言(Cprogramminglanguage)开始,因为它是三种语言中资格最老、使用最广的一种。丹尼斯·里奇(DennisRitchie)于1972年发明了它,然后于1978年出版。里奇最开始的设计初衷是想要开发新版本的Unix......
  • C++中的cerr和clog
    标准错误流(cerr)预定义的对象cerr是iostream类的一个实例。cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是非缓冲的,且每个流插入到cerr都会立即输出。cerr也是与流插入运算符<<结合使用的,如下所示:和cout用法一样不过区别就在是否缓冲的问题。cerr是不缓冲的有什么......
  • C++文件输入输出
    参考博文:https://blog.csdn.net/houbincarson/article/details/136327765/*文件输入输出fstream有三个文件流类:std::ifstream:用于从文件中读取数据的输入流对象。std::ofstream:用于向文件中写入数据的输出流对象。std::fstream:用于读写文件的输入输出流对象。*/#include<f......
  • Qt QTableView设置自适应行高、列宽、行样式
    1、QTableView设置自适应行高ui->tableViewMonitor->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自动设置行高2、QTableView设置自适应列宽ui->tableViewMonitor->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents)......
  • Qt QTableWidget resizeRowsToContents非常慢
    QTableWidget是Qt框架中的一个表格控件,用于显示和编辑表格数据。resizeRowsToContents是QTableWidget的一个函数,用于自动调整表格行的高度以适应内容。该函数在某些情况下可能会导致性能问题,特别是当表格中的行数较多或者表格中的内容较复杂时。这是因为该函数需要遍......
  • 2024华为OD机试真题- 电脑病毒感染-(C++/Python)-C卷D卷-200分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)      题目描述一个局域网内有很多台电脑,分别标注为0~N-1的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。......
  • C++(函数指针)
    目录基本语法示例常见用途注意事项函数指针是指向函数的指针,它保存了函数的地址,可以通过它调用指向的函数。函数指针在C++中具有多种用途,例如回调函数、动态函数调用以及实现多态等。基本语法函数指针的声明语法如下:返回类型(*指针名)(参数列表);示例声明和定义一个函数......