x
dvpInt32 callback1(dvpHandle handle, dvpStreamEvent event, void *pContext, dvpFrame *pFrame, void *pBuffer)
{
MainWindow* mainwindow = (MainWindow*)pContext;
if (pFrame->format == FORMAT_MONO)
{
mainwindow->process(cv::Mat(pFrame->iHeight, pFrame->iWidth, CV_8UC1, pBuffer));
}
else if (pFrame->format == FORMAT_BGR24)
{
mainwindow->process(cv::Mat(pFrame->iHeight, pFrame->iWidth, CV_8UC3, pBuffer));
}
return 0;
}
dvpInt32 callback2(dvpHandle handle, dvpStreamEvent event, void *pContext, dvpFrame *pFrame, void *pBuffer)
{
MainWindow* mainwindow = (MainWindow*)pContext;
if (pFrame->format == FORMAT_MONO)
{
mainwindow->process(cv::Mat(pFrame->iHeight, pFrame->iWidth, CV_8UC1, pBuffer));
}
else if (pFrame->format == FORMAT_BGR24)
{
mainwindow->process(cv::Mat(pFrame->iHeight, pFrame->iWidth, CV_8UC3, pBuffer));
}
return 0;
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int i;
dvpCameraInfo info[16];
dvpEnum(i, &info[i]);
dvpOpenByName(info[0].FriendlyName, OPEN_NORMAL, &m_handle1);
dvpOpenByName(info[0].FriendlyName, OPEN_NORMAL, &m_handle2);
dvpRegisterStreamCallback(m_handle1, callback1, STREAM_EVENT_FRAME_THREAD, this);
dvpRegisterStreamCallback(m_handle2, callback2, STREAM_EVENT_FRAME_THREAD, this);
m_worker1 = new Worker;
m_worker1->moveToThread(&m_worker_thread1);
connect(&m_worker_thread1, &QThread::finished, m_worker1, &QObject::deleteLater);
connect(this, &MainWindow::beginWork, m_worker1, &Worker::beginWork);
// connect(m_worker1, &Worker::endWork, this, &MainWindow::endWork);
m_worker_thread1.start();
}
MainWindow::~MainWindow()
{
delete ui;
m_worker_thread1.quit();
m_worker_thread1.wait();
}
void MainWindow::process(cv::Mat data)
{
m_worker1->setData(data);
emit beginWork();
}
void MainWindow::endWork(QImage image)
{
// glWidget->setImage(image);
}
Worker::Worker(QObject *parent) : QObject(parent)
{
}
void Worker::setData(cv::Mat data)
{
m_mutex.lock();
data.copyTo(m_data);
m_mutex.unlock();
}
void Worker::beginWork()
{
// cuda(m_data);
// emit endWork();
}
xxxxxxxxxx
sudo apt install libavcodec-extra libfaad2 libmad0
pulseaudio --start
VlcCommon::setPluginPath("/usr/lib/aarch64-linux-gnu/vlc/plugins");
QStringList args; args << "--aout=alsa" // 使用 ALSA 音频输出 << "--verbose=2";
vlc udp://@:1234 --verbose=2
vcpkg 编译 Qt6 WebEngine
xxxxxxxxxx
git clone https://github.com/microsoft/vcpkg.git
sudo apt-get install build-essential tar curl zip unzip
sudo apt-get install libxcb-cursor0 libxcb-cursor-dev
sudo apt-get install autoconf automake libtool
sudo apt-get install ninja-build
sudo apt-get install autoconf-archive
sudo apt-get install meson
sudo apt install pkg-config python3 python3-pip python3-setuptools
pip3 install --user meson
pip3 install --user jinja2
sudo apt-get install bison
sudo apt install libxtst-dev
sudo apt-get install libx11-xcb-dev libgl1-mesa-dev libxrender-dev libxi-dev
sudo apt-get install libxcb.*-dev
sudo apt install libx11-xcb-dev libxcb1-dev libxcb-util-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
./vcpkg install --triplet=x64-linux-dynamic qt5-webengine
vcpkg.exe install --editable qtwebengine --x-buildtrees-root=D:/b
git clone https://github.com/microsoft/vcpkg.git
vcpkg install gdal --triplet=x64-mingw-dynamic
xxxxxxxxxx
net use Z: /delete
pyinstaller --hidden-import openpyxl.cell._writer main.py
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:\chrome_dev"
xxxxxxxxxx
键名 十六进制值 按键
Qt::Key_Escape 0x01000000 Esc
Qt::Key_Tab 0x01000001 Tab
Qt::Key_Backtab 0x01000002 Tab
Qt::Key_Backspace 0x01000003 退格
Qt::Key_Return 0x01000004 回车(字母)
Qt::Key_Enter 0x01000005 回车(小键盘)
Qt::Key_Insert 0x01000006 插入
Qt::Key_Delete 0x01000007 删除
Qt::Key_Pause 0x01000008 Pause/Break
Qt::Key_Print 0x01000009 打印键
Qt::Key_Home 0x01000010 Home 键
Qt::Key_End 0x01000011 结束键
Qt::Key_Left 0x01000012 ←
Qt::Key_Up 0x01000013 ↑
Qt::Key_Right 0x01000014 →
Qt::Key_Down 0x01000015 ↓
Qt::Key_PageUp 0x01000016 翻页(上)
Qt::Key_PageDown 0x01000017 翻页(下)
Qt::Key_Shift 0x01000020 Shift
Qt::Key_Control 0x01000021 Ctrl
Qt::Key_Alt 0x01000023 Alt (左)
Qt::Key_AltGr 0x01001103 Alt (右)
Qt::Key_CapsLock 0x01000024 大写锁定
Qt::Key_NumLock 0x01000025 数字锁定
Qt::Key_ScrollLock 0x01000026 卷动锁定
Qt::Key_F1 到 Qt::Key_F35 0x01000030 到 0x01000052 F1 到 F35
Qt::Key_Menu 0x01000055 菜单
Qt::Key_Space 0x20 空格
Qt::Key_Exclam 0x21 ! 惊叹号
Qt::Key_QuoteDbl 0x22 双引号
Qt::Key_NumberSign 0x23 # 号
Qt::Key_Dollar 0x24 $ 美元符号
Qt::Key_Percent 0x25 % 百分号
Qt::Key_Ampersand 0x26 & 取地址
Qt::Key_Apostrophe 0x27 ' 单引号
Qt::Key_ParenLeft 0x28 ( 左括号
Qt::Key_ParenRight 0x29 ) 右括号
Qt::Key_Asterisk 0x2a * 星号
Qt::Key_Plus 0x2b + 加号
Qt::Key_Comma 0x2c , 逗号
Qt::Key_Minus 0x2d - 减号
Qt::Key_Period 0x2e . 小数点
Qt::Key_Slash 0x2f / 斜杠
Qt::Key_0 到 Qt::Key_9 0x30 到 0x39 0 到 9 数字
Qt::Key_Colon 0x3a : 冒号
Qt::Key_Semicolon 0x3b ; 分号
Qt::Key_Less 0x3c < 小于号
Qt::Key_Equal 0x3d = 等号
Qt::Key_Greater 0x3e > 大于号
Qt::Key_Question 0x3f ? 问号
Qt::Key_At 0x40 @
Qt::Key_A 到 Qt::Key_Z 0x41 到 0x5a a 到 z 字母
Qt::Key_BracketLeft 0x5b [ 左方括号
Qt::Key_Backslash 0x5c \ 反斜杠
Qt::Key_BracketRight 0x5d ] 右方括号
Qt::Key_AsciiCircum 0x5e ^ 插入符号
Qt::Key_Underscore 0x5f _ 下划线
Qt::Key_QuoteLeft 0x60 “ 左双引号
Qt::Key_BraceLeft 0x7b { 左花括号
Qt::Key_Bar 0x7c | 竖号
Qt::Key_BraceRight 0x7d } 右花括号
Qt::Key_AsciiTilde 0x7e ~ 波浪号
Qt::Key_nobreakspace 0x0a0 不换行空格
Qt::Key_exclamdown 0x0a1 ! 惊叹号
Qt::Key_cent 0x0a2 美分键
Qt::Key_sterling 0x0a3 英镑键
Qt::Key_currency 0x0a4 货币键
Qt::Key_yen 0x0a5 日元键
Qt::Key_Back 0x01000061 后退键
Qt::Key_Forward 0x01000062 前进键
Qt::Key_Stop 0x01000063 停止键
Qt::Key_Refresh 0x01000064 刷新键
Qt::Key_VolumeDown 0x01000070 降低音量键
Qt::Key_VolumeMute 0x01000071 音量静音键
Qt::Key_VolumeUp 0x01000072 提高音量键
Qt::Key_HomePage 0x01000090 首页键
Qt::Key_Favorites 0x01000091 收藏键
Qt::Key_Search 0x01000092 搜索键
xxxxxxxxxx
git clone https://github.com/microsoft/vcpkg.git
cd D:/vcpkg
bootstrap-vcpkg.bat
vcpkg.exe install --editable qtwebengine[proprietary-codecs] --x-buildtrees-root=D:/b
win11 sdk version 10.0.22621.0
14.42.34438.0
Visual Studio Community 2022 17.13.6
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.43.34810 版
xxxxxxxxxx
FAILED: gen/components/resources/ssl/ssl_error_assistant/ssl_error_assistant.pb
D:\b\qtwebengine\src\here-src-6-3c15aa4209\src\3rdparty\chromium\components\resources\protobufs\binary_proto_generator.py
print(">>> opts =", opts)
print(">>> sys.path =", sys.path)
卸载自带的 python3.12
安装vs2022时 vcredist报错,通过控制面板无法清除干净原有的 vcredist2015-2019
使用工具 Windows Installer Cleanup Utility
目的 解决windows下 可预览svg图标.
方案 如果需要在 Windows 的资源管理器中预览 SVG 图标,就像预览 JPG、PNG 等图片一样方便。
下载svg扩展
https://github.com/tibold/svg-explorer-extension/releases https://download.cnet.com/svg-explorer-extension/3000-2248_4-78237543.html
打开cmd窗口, 清空数据
xxxxxxxxxx
TASKKILL /IM explorer* /F
DEL "%localappdata%\IconCache.db" /A
explorer.exe
你正在配置 Qt 程序的 manifest 和资源文件,使 app.exe
以 管理员权限运行(requireAdministrator),流程基本是这样的:
创建 app.exe.manifest
文件
内容如下(用于申请管理员权限):
xxxxxxxxxx
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
创建 res.rc
文件
内容如下(把 manifest 包含到资源中):
xxxxxxxxxx
1 24 "app.exe.manifest"
在 .pro
文件中添加资源定义:
xxxxxxxxxx
RC_FILE = res.rc
这样编译出来的 .exe
在运行时会自动弹出“以管理员身份运行”提示(UAC)。
app.exe.manifest
和 res.rc
要放在 .pro
同一目录下或正确配置路径。
RC_FILE = res.rc
必须写在 .pro
文件中,否则资源文件不会被编译器识别。
资源文件 .rc
只能在 Windows 下生效。
如果你用的是 qmake
,而不是 cmake
,上面的写法是兼容的。
.\bin\binarycreator --offline-only -t .\bin\installerbase -c .\config\config.xml -p .\packages MiniStarCut