QT
会头痛的可达鸭
美食研究猿
展开
-
尝试解决中文乱码问题
一、环境windows VS2015,代码中需要显示中文(界面是QT搭建的) 1、使用宏定义#ifdef Q_OS_WIN64#pragma execution_character_set("utf-8")#endif 2、使用QObject::tr(); 尽量不要使用QString::fromLocal8Bit(),原因是,在项目需要被翻译成其他语...原创 2018-05-15 16:53:35 · 1362 阅读 · 0 评论 -
char*转QString
QString getString(const char * pString){ return QString::fromLocal8Bit(std::string(pString).c_str());}原创 2020-01-13 10:26:19 · 399 阅读 · 0 评论 -
打开外部EXE程序,并且出传递参数
1、采用Windows指令//设置操作指令 std::wstring operate = QString("runas").toStdWString();//设置EXE路径std::wstring path = QCoreApplication::applicationDirPath().toStdWString();//设置EXE std::wstr...原创 2019-01-21 18:37:08 · 2983 阅读 · 1 评论 -
如何来用自定义的配置文件,打开自定义程序
个人理解,不对的地方往指正,不甚感谢!1、环境QT 、VS2015、win642、语言C++问题:自己定义的文件类似于.abc .abcd 要用他来打开我们自己的a.exe,且区分文件类型!一、弄清main(int argc, char* argv[])的定义 argc---指向变量的个数(默认为1,类似于a.abc指向 a.exe,那么argc就是2) argv存放指向变量参数的指...原创 2018-06-22 10:21:52 · 603 阅读 · 0 评论 -
QT程序单例化
singleApplication.h#ifndef SINGLEAPPLICATION_H#define SINGLEAPPLICATION_H#include <QObject>#include <QApplication>#include <QWidget>class QLocalServer;class SingleApplication ...原创 2020-10-10 14:49:09 · 178 阅读 · 0 评论 -
QT widget宽高比
1、首先想到的是---重载resizeEvenntvoid resizeEvent(QResizeEvent * event){ //当前宽高 int nWidth = event->size().width(); int nHeight = event->size().height(); //太宽了 if (nWidth * 9 > nHeight * 16) {...原创 2018-04-27 11:51:51 · 4608 阅读 · 0 评论 -
QT开发:QString to JSON 格式
JSON 是一种特殊的字符串,存放有Key(关键字) 和Data(数据) 两部分,例如{"firstName":"John"}。由于JSON也是字符串,那么怎么判断字符串是JOSN格式呢? 现在并没有提供一种好的API来判断,所以博主采用了 在JSON字符串的前面添加"[JSON]" 来判断。JSON 里面存放的数据是String类型的,采取方法是 QString ---> Stri原创 2017-02-06 20:17:04 · 4183 阅读 · 0 评论 -
QWebengine Windows编译
一、编译工具1、Qt5.13.0--可以自行选择版本,安装时候勾选源码和QWebengine--配置环境变量2、vs2017,并把nmake.exe加入PATH中(为什么有乱码后面会解释)3、python2.7--不要下载3系列的,并配置环境变量4、Perl--并配置环境变量5、Bison and flex--并配置环境变量6、Gperf--这个不需要下载Qt中自带--配置环境变量7、Windows SDK8、修改系统语言--地区--时间--.原创 2021-07-08 16:08:13 · 1214 阅读 · 0 评论 -
QWebSocket支持ssl
一、QWebSocket支持网页测试websocket测试网站:http://coolaf.com/tool/chattest测试url:ws://82.157.123.54:9010/ajaxchattest测试结果:连接失败服务器断开连接原因:通过抓包对比发现少了“Origin”字段QNetworkRequest request;request.setUrl(QUrl(url));request.setRawHeader("Origin", "http://baidu.com.原创 2021-07-06 19:04:26 · 989 阅读 · 0 评论 -
QT、WinMain项目如何启用控制台
1、Qt 本质上是一个WinMain窗口2、方法一3、方法二(有些项目在使用控制台后会编译不过)在winMain中创建控制台并打开stdin原创 2021-05-26 11:41:14 · 540 阅读 · 0 评论 -
QT翻译文件合并
需求来源:在旧的翻译文件合并为一个后(脚本参考https://blog.csdn.net/qq_15821883/article/details/114577479),需要把已经翻译的文件覆盖到新文件中一、通过打开文件的形式,把已经翻译的文件替换左边添加源文件、右边添加目标文件,点击中间的按钮,执行操作二、源码#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFileDialog>#include.原创 2021-03-10 17:55:32 · 736 阅读 · 3 评论 -
QT更新翻译文件
QT命令,可以根据pro文件 和资源文件进行选择翻译注意:pro文件需要自行添加好翻译文件 需要翻译的class要Q_OBJECT宏 ,或者使用QObject::tr()// 操作 -help 显示帮助并退出 -no-obsolete 弃用无效字符串 -extensions <ext>[,<ext>]... 指定特定的文件更新翻译,扩展名列表必须用逗号分隔 默认: 'java,j原创 2021-03-09 11:11:22 · 1893 阅读 · 0 评论 -
无极缩放滚动条
滚动条分析1、无极缩放滚动条,滚动条包含滑块、左右拉伸按钮, 最左、最右存在两个sigle step按钮2、value计算3、缩放计算(滚动条特有)滑块占整个滚动条的长度比例4、节目布局5、代码#pragma once#include <QFrame>#include <QToolButton>#include <QBoxLayout>#include <QVBoxLayout>#include.原创 2021-03-08 10:04:33 · 429 阅读 · 0 评论 -
QT界面拉伸距离自定义
遇到的问题:QDockWidget在浮动状态,边框不好选中出现原因:Qt 源码中的默认大小为4,当QDockWidget存在子界面的时候,子界面的mousemove没触发 选中解决方案: 通过windos信号判断鼠标的位置,在确定击中边框#define SPACE_LENTH 10bool DockWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)...原创 2021-02-26 19:00:16 · 250 阅读 · 0 评论 -
Qt 日志系统
一、注册日志消息处理程序调用qInstallMessageHandler(处理日志函数),打印调试信息(QtDebugMsg)、警告信息(QtWarningMsg)、严重错误(QtCriticalMsg)和致命的错误(QtFatalMsg)的消息 Qt源码中会打印出很多warning信息和debug信息,可以通过QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT 屏蔽 调用qInstallMessageHandler(0)可以恢复消息处理程序。二、日志类型 Q.原创 2021-01-27 18:14:58 · 6839 阅读 · 12 评论 -
QListWidget QListItemWidget 被隐藏的Bug
正常情况异常情况BUG:当我们给QListWidgetItem 设置上自定义的Widget后,变化QListWidget大小会出现隐藏掉Widget的问题一、出现这种情况的原因是,QStyledItemDelegate::updateEditorGeometry计算出来的宽高是错误的二、解决这个QT的bug 1、创建Delegate,实现updateEditorGeometry方法2、设置DelegateQListWidget::setIte...原创 2021-01-22 16:27:50 · 718 阅读 · 0 评论 -
windows守护进程
一、逻辑分析1、windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程2、守护进程应该是单例的进程---》单例进程3、守护进程应该是存在一个子线程不断的判断是否存在守护目标,若不存在(异常退出)则启动守护目标4、当守护目标正常退出时,需要关闭守护进程(1)、直接kill掉守护进程(守护进程没有做成病毒进程(系统进程)---记录下这里没找到方法)(2)、进程间通讯实现关闭守护进程---有很多的方法博主使用的是命名管道二、守护线程原创 2021-01-12 17:04:03 · 5375 阅读 · 0 评论 -
QT单例进程
#ifndef SINGLEAPPLICATION_H#define SINGLEAPPLICATION_H#include <QObject>#include <QApplication>#include <QWidget>class QLocalServer;class HiSingleApplication : public QApplication{ Q_OBJECTpublic: HiSingleApplication(in...原创 2021-01-12 16:43:41 · 431 阅读 · 0 评论 -
QT工具的一个bug
BUG: Qt moc 不能识别 true 和 false, 修改为0、1后正常问题:发现moc生成的对象并不是QWidget修改为0、1后正常原创 2020-12-28 16:23:15 · 136 阅读 · 0 评论 -
已知矩形中心点,宽高,求矩形旋转后的坐标
// pt1-------pt2 // | | // | | // | | // pt4-------pt3// 已知矩形中心点QPoint pt, 矩形宽W,高H,求沿中心点旋转_anle后的坐标位置QPoint _pt1, _pt2, _pt3, _pt4;qreal angle = _angle / 180.0 * M_PI;qreal a = qSin(angle) * 0.5;qreal b = qCos(..原创 2020-11-27 15:20:51 · 2761 阅读 · 0 评论 -
截取QEvent并且优先处理
QEvent事件案例:全局快捷键处理一、前言 在一个复杂的大型QT项目中,会存在很多QAction,并为之设置快捷键,若要自定义和QAction相同的快捷键、或者全局的快捷键(类似于Ctrl+A、Ctrl+S之类),就可能被冲突掉二、快捷键响应过程1)、去官网下载相应版本的PDB文件,链接https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/,找到相应的版本号qt5_597/(代表...原创 2020-09-18 15:07:57 · 604 阅读 · 0 评论 -
QFileDialog::getOpenFileNames 弹框时不能拖拽文件到窗口(不响应dragEnterEvent 事件)
1、QFileDialog 5.6升级到5.9后出现的一个BUGQt5.6 升级到5.9后, 在 QGuiApplicationPrivate::processDrag中, 判断了窗口如果是模态就忽略drap事件,针对于这个BUG解决方案如下1、不再使用QFileDialog的静态事件,QT自动创建的QFileDialog是模态对话框2、使用setWindowFlags 设计窗口非模态FramelessWindowHint3、设置过滤器等信息, 再调用exec,注意此时的QFileDialog原创 2020-09-14 19:07:13 · 1110 阅读 · 0 评论 -
QT QEvent事件
一、QEvent机制1、main函数开启事件循环后QCoreApplication::exec(),会从事件队列中截取本机的窗口系统事件,并将其转化为QEvents,然后再分发给OBjects执行过程-》QApplIction::notify-》QMainWindow::event-》QDockWidget-》......-》OBject::event2、QObject :: installEventFilter()可以拦截,发向另外对象的QOject::event事件执行过程...原创 2020-09-10 19:08:40 · 572 阅读 · 0 评论 -
QT DPI适配,以及窗口输出计算
windows缩放,和QT界面适配一、QT有自适应DPI适配方案(但是有部分缺陷)int main(int argc, char *argv[]){ // 开启DPI适配--需要放在QApplication 前面 QCoreApplication::setAttribute(Qt::AA_EnableHigh...原创 2020-07-29 11:26:15 · 3138 阅读 · 0 评论 -
Qt Shift快捷键,QT组合按键的一个bug
在Qt常常会使用到组合按键作为快捷键,而快捷键往往有一下的写法:void QMainWindow::keyReleaseEvent(QKeyEvent *event){ int uKey = event->key(); Qt::KeyboardModifiers modifiers = event->modifiers(); //判断某个修饰键是否被按下 if (modifiers == Qt::NoModifier) { // 判断ukey是哪个键.原创 2020-07-10 15:54:39 · 1552 阅读 · 0 评论 -
QT渲染窗口添加遮罩
// 创建遮罩 m_cellMasks[0] = new QWidget; m_cellMasks[0]->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); // 隐藏标题 m_cellMasks[0]->setWindowOpacity(0.4); //关键-设置窗口透明度-1不透明 0透明 m_cellMasks[0]->setVisible(false); // 默认隐...原创 2020-07-06 12:10:37 · 675 阅读 · 0 评论 -
QToolButton 添加菜单后去掉黑色三角
m_pBtnSel->setPopupMode(QToolButton::InstantPopup);qss:QToolButton#m_pBtnSel::menu-indicator{ image: none;}原创 2020-05-15 15:31:05 · 1708 阅读 · 0 评论 -
关于QSting转化为const char*
上面是QT源码,我们应该能看到,QByteArray只是一个栈上的内存,如果直接引用,当超过会导致指针作用域失效譬如:QByteArray arry = m_qstring.toUtf8();char* p = arry.data(); // 这个指针指向栈内存,有野指针的风险如果在别的地方引用P指针,对导致*p指向的内容会被析构掉,从而失效,这里我们需要让*p指向堆内存...原创 2020-05-07 16:46:47 · 218 阅读 · 0 评论 -
获取路径所在磁盘剩余大小
quint64 get_disk_remain_space(const QString & drive_letter){ LPCWSTR lpcwstrDriver = (LPCWSTR)drive_letter.utf16(); ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes; if ...原创 2020-05-07 16:33:41 · 415 阅读 · 0 评论 -
使用vs编译环境amd64,解决 qrc 编译出错:fatal error C1060:编译器的堆空间不足
出现原因:qrc_xxxx.cpp文件过大1、解决方案一:qrc分文件2、解决方案二:用x64打开.sln文件 step1: 执行vs2015的编译命令行:VS2015 x64 x86 兼容工具命令提示符 step2: cd D:\progject (进入工程目录) step3: XXX.sln 再编译就解决了...原创 2020-04-20 14:30:12 · 2557 阅读 · 0 评论 -
封装QListWidget
目标:封装横向布局、自适应大小、支持缩放的QListWidget1、QListWidget:列表控件 支持添加QListWidgetItem2、QListWidget常用接口: a)、void setSelectionMode(QAbstractItemView::SelectionMode mode);---设置选中模式QAbstractItemView::Sing...原创 2020-04-17 10:59:12 · 348 阅读 · 0 评论 -
支持拖拽媒体资源的基类
#pragma once#include <QWidget>class QDragEnterEvent;class QDropEvent;class MaterialWidget : public QWidget{ Q_OBJECTpublic: enum MaterialType { MaterialType_error = -1, ...原创 2020-03-30 14:31:57 · 119 阅读 · 0 评论 -
字符串中提取IP地址
// 带端口号的IP地址QStringList getIpAddressAndPort(const QString & strText){ QStringList strList; QRegExp rx("(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\...原创 2020-03-24 11:14:45 · 2233 阅读 · 0 评论 -
QMetaEnumd 使用
enumeType { eType_one= 0, eType_Two, eType_Three, }; Q_ENUM(eType) // 注册QMetaEnum1、QMetaEnum提供了enum-》string enum-》string2、转化templa...原创 2020-02-06 10:49:56 · 333 阅读 · 0 评论 -
自定义Tips弹框
HiTipsWidget::HiTipsWidget(QWidget *parent) : QWidget(parent), ui(new Ui::HiTipsWidget){ ui->setupUi(this); // Qt::Tool 会让弹框不占用焦点 this->setWindowFlags(Qt::WindowStaysOnTopH...原创 2019-12-04 10:41:09 · 392 阅读 · 0 评论 -
QToolBar 拉伸图标(>>)样式
1、QT源码// qtoolbarextension.cpp QToolBarExtension::QToolBarExtension(QWidget *parent) : QToolButton(parent){ setObjectName(QLatin1String("qt_toolbar_ext_button")); setAutoRaise(true);...原创 2019-10-21 16:37:46 · 1322 阅读 · 0 评论 -
关于QMenuBar 拉伸图标样式
一、先来看QT源码QMenuBarExtension::QMenuBarExtension(QWidget *parent) : QToolButton(parent){ setObjectName(QLatin1String("qt_menubar_ext_button")); setAutoRaise(true);#if QT_CONFIG(menu) ...原创 2019-10-18 16:19:20 · 978 阅读 · 0 评论 -
QLabel 打开网页
QLabel 支持各种语言,包括HTML语言1、设置HTML语言ui->label->setText("<a href='http://www.facebook.com'>http://www.facebook.com</a>");2、启用链接ui->label->setOpenExternalLinks(true);...原创 2018-11-02 11:02:03 · 607 阅读 · 0 评论 -
QTreeWidget 设置图片以及图片大小
QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);QIcon icon = QIcon(":icon/1.png");item->setIcon(0, icon);ui->treeWidget->setIconSize(QSize(55, 24));//这个大小就是显示图片的大小...原创 2018-10-23 14:57:21 · 5796 阅读 · 0 评论 -
QT打开外部程序Windows & Mac
QString qsPath = QCoreApplication::applicationDirPath();#ifdef _WIN32 qsPath += + "/user.exe"; qsPath.replace("/", "\\"); QProcess::startDetached(qsPath, QStringList());#else // _WIN32...原创 2018-08-02 14:41:05 · 1548 阅读 · 0 评论