QT开发

1. QT编译后在windows下缺少QtCore5.dll

解决办法:

找到Qt的安装目录,主要是bin文件 添加到Windows的系统变量中

QT需要静态编译

 

2. Windows上出现 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

解决办法:

确定工程是32位还是64位, 下载openssl ,  下载地址:

https://slproweb.com/products/Win32OpenSSL.html

下载的文件为 Win64 OpenSSL v1.1.1h Light Ligth版本即可

 

下载完装后,将以下两个文件复制到QT.dll目录(QT Creator运行的时候使用)和release目录(release打包版本的时候用)

WX20201125 162648 2x

 

3. 解决Windows下面打包后 无法运行的问题

解决办法:

安装Visual Studio , 如果安装过,得重新打开添加删除程序找到,修复,一定要装上

20200407132545731

 

4. 可以在pro文件中写上标记版本号+ico图标(Qt5才支持)

VERSION = 2020.10.25
RC_ICONS = main0.ico

 

5. 运行文件附带调试输出窗口 CONFIG += console pro

 

6, Qt内置图标封装在QStyle中,大概七十多个图标,可以直接拿来用。

 

SP_TitleBarMenuButton,
SP_TitleBarMinButton,
SP_TitleBarMaxButton,
SP_TitleBarCloseButton,
SP_MessageBoxInformation,
SP_MessageBoxWarning,
SP_MessageBoxCritical,
SP_MessageBoxQuestion,

7 Qt最小化后恢复界面假死冻结,加上代码

void showEvent(QShowEvent *e)
{
setAttribute(Qt::WA_Mapped);
QWidget::showEvent(e);
}

8 获取标题栏高度 

style()->pixelMetric(QStyle::PM_TitleBarHeight); PM_TitleBarHeight点进去你会发现新大陆。

9.  设置分辨率支持, retina ,必须写在main函数的QApplication a(argc, argv);的前面。

#if (QT_VERSION > QT_VERSION_CHECK(5,6,0))
//解决部分图标不清楚的问题
qApp->setAttribute(Qt::AA_EnableHighDpiScaling);
qApp->setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif

10. Windows 下发布  windowsDeploy的时候 需要在开始菜单栏找到MSVC,然后 windowsDeploy **.exe  这样才能保证将所有的Dll打包成功,不要使用其他路径的windowsDeploey容易出现问题

11. windows下解决中文报错的问题

将编码格式设置为utf-8 + boom的方式,如果报错那么就直接,打开报错的文件,一般是.cpp, 再修改一下 再保存 即可

 

 

12. windows下解决中文乱码的问题,头文件里加上以下代码

#pragma execution_character_set(“utf-8”)

13.Windows读取Mac备份和Mac系统的plist问题

Mac上的.plist文件是二进制文件,不是普通的xml文件,windows电脑无法直接读取,需要转换后才行,具体方法在研究之中

14. QT判断文件类型

current_focus_widget->inherits(“QLineEdit”)

15. QT 删除布局

if(ui->widget_head->layout()->inherits(“QVBoxLayout”))

{

delete ui->widget_head->layout();
}

16 关于Qss , 同一个widget只能设置一次styleSheet页,必要将两个设置到一起,以最后的一个生效为准 

ui->listWidget->setStyleSheet(“QListWidget::item{background: rgb(255,255,255);}QListWidget::item:selected{background: #F4F4F3;}QListWidget#listWidget{border:1px solid #E5E5E5;}”);

17 关于QT 版本编译区别 realese和debug, 部分情况下 更改了后 需要rebuid项目

#ifdef QT_NO_DEBUG
 
qDebug() << “release mode”;
 
#else
 
qDebug() << “debug mode”;
 
#endif

18 . QT删除webEngine 缓存

QWebEngineProfile * engineProfile = m_webView->page()->profile();
engineProfile->clearHttpCache(); //删除缓存

QWebEngineCookieStore *cookie = engineProfile->cookieStore();
cookie->deleteAllCookies(); //删除cookie

QString cachePath = engineProfile->cachePath();
QDir cachePathDir(cachePath);
if (cachePathDir.exists())
{
bool rlt = cachePathDir.rmdir(cachePath); //删除缓存目录
if (!rlt)
{
qDebug() << QStringLiteral(“删除缓存目录失败!”);
}
}

 

19, 解决 Webengine doesn’t allow to open local content from html files问题,有两种方法,尝试过都ok

代码的写法:

QUrl imgsrc= QUrl::fromLocalFile(“/Users/zhai/1.jpg”);

message = QString(“<img src=’%1′ alt=’%2′ /> “).arg(imgsrc.toString()).arg(imgsrc.toString());

解决的办法,方法1,在main.cpp中添加 以下方法

char ARG_DISABLE_WEB_SECURITY[] = “–disable-web-security”;
int newArgc = argc+1+1;
char** newArgv = new char*[newArgc];
for(int i=0; i<argc; i++) {
newArgv[i] = argv[i];
}
newArgv[argc] = ARG_DISABLE_WEB_SECURITY;
newArgv[argc+1] = nullptr;

QApplication a(newArgc, newArgv); //使用load本地图片

方法2, 使用

m_webView->setHtml(html,QUrl(“file://”));

 

20, 多窗口通知

子窗口可以通过parentWidget()来调用父窗口的函数

也可以slot ,  signal 来发送信号。 

 

21, QT  debug windows

QtCreator 在Mac下面可以直接Debug,但是在windows下面有没有调试器, 下载windows下的调试器,就可以了

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

22 inno setup美化

参考:https://blog.csdn.net/u012981972/article/details/109398368

下载:https://download.csdn.net/download/u012981972/13081183 

 

22. Qt的在线安装 ,不要使用离线安装工具, 不能更新到最新的版本,建议使用在线安装工具,下载地址:

https://download.qt.io/official_releases/online_installers/

Share your thoughts