# Qt 开发经验总结 **Repository Path**: feng_yan_yu/qt_development-experience ## Basic Information - **Project Name**: Qt 开发经验总结 - **Description**: 记录Qt开发相关的经验 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-02 - **Last Updated**: 2021-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Qt 开发经验总结 #### 介绍 记录Qt开发相关的经验 #### Qt异常即解决方法 1. 文件中有中文时会出现编译错误: C2001: 常量中有换行符... *将该文件用Nodepad++或者其他编辑器打开,然后修改编码方式为UTF-8-BOM格式即可* 2. Qt Widget中嵌入QOpenGLWidget时,Widget全屏后会导致弹出的子窗口无法正常显示,并且会出现一瞬间的黑屏,闪烁明显等一系列异常情况 *如果一定要全屏Widget,则通过设置Widget的宽/高,使宽/高比全屏时的宽/高多出1px即可* 3. #### QWidget 1. QSS样式无法生效 1. 方式一:重写paintEvent ```c++ QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); ``` 2. 方式二:设置Widget属性 ```c++ setAttribute(Qt::WA_StyledBackground); ``` 2. QWidget子窗口之间的覆盖问题 具体参考:[QWidget Z-Order研究](https://blog.csdn.net/weixin_52511809/article/details/119907823?utm_source=app&app_version=4.14.0&code=app_1562916241&uLinkId=usr1mkqgl919blen) 3. QWidget设置圆角效果为黑色 设置Widget属性: ```c++ setAttribute(Qt::WA_TranslucentBackground); ``` 然后设置样式: ```css #widget { border: none; border-radius: 10px; } ``` 4. #### QListWidget 1. 销毁所有Item对象: ```c++ while (list->count() > 0) { delete list->takeItem(0); } list->clear(); ``` 2. 设置Item行高 ```c++ auto item = new QListWidgetItem(""); item->setSizeHint(QSize(item->sizeHint().width(), 22)); ``` 3. 列表的Item添加Check状态(即Item前面打勾) ```c++ bool state = true; auto item = new QListWidgetItem(""); item->setCheckState(state ? Qt::Checked : Qt::Unchecked); ``` 4. 通过QSS设置Item Check状态样式(即打勾的样式) ```css QListWidget::indicator:checked { image: url(:/img/select.png); } QListWidget::indicator:unchecked { image: url(:/img/noselect.png); } ``` 5. 去掉Item选中时的虚线框 ```c++ list->setFocusPolicy(Qt::NoFocus); ``` 6. 设置QListWidget选中模式 ```c++ list->setSelectionMode(QAbstractItemView::NoSelection); ``` 7. 8. #### QQuickWidget/QQuickView 1. QQuickWidget通过setSource加载QML文件 2. QQuickWidget加载的QML对象不要使用`anchors.fill: parent`,因为QML的root Item没有设置固定的宽和高,QQuickWidget加载后导致其宽高都为0。 #### QML 1. #### 滚动条效果 1. scroll.qss (参考QSS文件夹) ![image-20210802174449222](./qss/scroll1.png) 2. 1