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打包版本的时候用)
3. 解决Windows下面打包后 无法运行的问题
解决办法:
安装Visual Studio , 如果安装过,得重新打开添加删除程序找到,修复,一定要装上
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(); //删除cookieQString 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/