1、CMAKE- Qt
翻译
- 准备语句
放到 上级的CMakeList里
set(TS_DIR "${CMAKE_CURRENT_SOURCE_DIR}")/../../YourFolder/translate
find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)
- lupdate
#需要加载翻译工具
# find_package(LinguistTools REQUIRED)
set(TS_FILES
"${TS_DIR}/${PROJECT_NAME}_zh_cn.ts"
)
foreach(_ts_file ${TS_FILES})
execute_process(
COMMAND ${LUPDATE_EXECUTABLE } -recursive ${CMAKE_CURRENT_SOURCE_DIR} -ts ${_ts_file})
endforeach()
##lrelease end
- lrelease
#获取所有的翻译ts文件
file( GLOB TS_FILES ${TS_DIR}/*.ts)
##编译时更新.ts .qm
foreach(_ts_file ${TS_FILES})
execute_process(COMMAND lrelease ${_ts_file})
endforeach()
##lurelease end
放到其他目录:
set(_ts_file "d:/ddd/translate.ts")
message(${_ts_file})
string(REGEX MATCHALL "[0-9A-Za-z_]*.ts" fileName ${_ts_file})
message(${fileName})
string(REGEX REPLACE ".ts" ".qm" newFileName ${fileName})
message(${newFileName})
#然后组织你的新位置
set(_qm_file "d:/ddd/qm/${newFileName}")
2、QWidget
Icon设定WindowsIcon的方法
可以避开ico文件
QIcon icon;
icon.addFile(QString::fromUtf8(":/resources/Resources/images/sample.svg"), QSize(),
QIcon::Normal, QIcon::Off);
this->setWindowIcon(icon);
Widget变成Native窗口可能引起的问题
在无边框可拖动的主界面标题栏鼠标事件被别的Native窗口接收,无法响应鼠标事件
QLabel等基础布局都变成拥有句柄的window,在nativeEventFilter过滤事件时候需要考虑这些基础部件
如何防止子部件Native化呢?
QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
QApplication::setAttribute(Qt::AA_NativeWindows,false);
//Qt::AA_NativeWindows受环境变量
QT_USE_NATIVE_WINDOWS控制,有可能环境变量被别的软件修改,所以也需要设置下
在有widget调用winId的之前widget->setAttribute(Qt::WA_DontCreateNativeAncestors);
问题:如果用了AA_DontCreateNativeWidgetSiblings
会导致QQmlApplicationEngine engine;出错
提示 没有创建 QApplication。
最小化后恢复界面假死冻结
void showEvent(QShowEvent *e)
{
setAttribute(Qt::WA_Mapped);
QWidget::showEvent(e);
}
设置支持高分辨率
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
使用QEventLoop同步获取返回结果而不阻塞界面
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
无边框窗体可自由拉伸边框
setWindowFlags(Qt::CustomizeWindowHint);
这个效果,标题栏变得很窄,但是四边可以拉伸
继承QWidget样式表不起作用
setAttribute(Qt::WA_StyledBackground, true);
void Widget::paintEvent(QPaintEvent *)
{
QStyleOption option;
option.initFrom(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);
}
3、 QML
QQuickWidget和C++交互
QQuickWidget与qml文件的交互1 - 设置上下文属性_风烟倦的博客-优快云博客
imeData data;
ui->quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
ui->quickWidget->rootContext()->setContextProperty("TestData", &data);
ui->quickWidget->setSource(QUrl("qrc:/main.qml"));
QML 和QWidget混用
实际上就是QWdget和 QQuickQidget混用,不是QWidget插入到QML里面
QWidget的Native化及解决_我的绿茶的博客-优快云博客
Qt::AA_DontCreateNativeWidgetSiblings
- 问题:QMLQuickWidget和QWidget混用时,QML的窗口黑窗,无法直接显示。
QCoreApplication::setAttribute(Qt:: AA_DontCreateNativeWidgetSiblings); 原文:Ensures that siblings of native
widgets stay non-native unless specifically set by the
Qt::WA_NativeWindow attribute. 翻译:确保本机小部件的同级保持非本机状态,除非由Qt::WA\u
NativeWindow属性专门设置。