说明
1. 对于控件位置可能会影响其value的值问题。
这类问题容易发生在依据工程中数据设置某个控件位置(例如依据QSlider宽度和数据值定位控件位置),哪怕你是有resizeEvent,当控件在没show出来的之前,其pos, geometry, 如果没有resize触发。最初的值是与ui拖拽设计有关(就是ui拖拽的pos geometry)的,这个时候尽量保证ui宽度是正确的宽高。 如果是自定义的ui(不通过xxxx.ui)生成,那你也需要初始化其值,并且要保证其值设置能够与show出来的宽度保持一致, 不然容易造成控件位置错误。
2. 对于数据处理尽量基于原数据进行某种处理, 而不是对基于原数据二次或者多次处理后数据处理, 这样才不会产生数据进行多次处理导致与现实预期处理结果有太多差异
比如说, 图片裁剪处理,假如我直接通过文件路径读取图片后做某种处理后在控件显示某个尺寸大小qpixmap 然后保存,然后opengl渲染时可以获取此图片是经过截取scale处理后的, 此时相比原图片会有明显的失真处理压缩不是原图片清晰度了。 这个时候opengl层如果只需要原素材文件路径, 读取图片等分辨率大小,在依据提供的缩放比例后截取的QRect, 就可以直接获取基于原分辨率的图片的尺寸位置截取, 并且截取后的图片不用失真。
3. enabled disabled 对于parent widget 以及 child widget
此属性保存小部件是否启用通常,启用的小部件处理键盘和鼠标事件; 禁用的小部件不会。 QAbstractButton 例外。
某些小部件在禁用时会以不同方式显示。 例如,一个按钮可能会将其标签绘制为灰色。 如果您的小部件需要知道它何时启用或禁用,您可以使用类型为 QEvent::EnabledChange 的 changeEvent()。
禁用小部件会隐式禁用其所有子级。 启用分别启用所有子小部件,除非它们已被明确禁用。 在其父小部件保持禁用状态时,无法显式启用不是窗口的子小部件。
默认情况下,此属性为 true。
4. text-align 属性设置
一般来说 可以设置setTextAlignment属性, 本来想偷点懒, 通过qss 设置 text-align, 结果发现目前只有QPushButton QProgressBar支持
text-align Alignment
The alignment of text and icon within the contents of the widget.
If this value is not specified, it defaults to the value that depends on the native style.
Example:
QPushButton {
text-align: left;
}
This property is currently supported only by QPushButton and QProgressBar.
5. property-xxx 属性设置
这依赖于QObject 属性机制 property
qss
QLabel {
font-size: 14px;
border-radius: 3px;
background-color: white;
qproperty-alignment: AlignHCenter|AlignVCenter
qproperty-text:'This is a Text Mesage';
}
6、QTableWidget表格内容自适应列宽
QHeaderView::Interactive
用户可以调整部分的大小。 也可以使用resizeSection()以编程方式调整该部分的大小。 段大小默认为defaultSectionSize。 (另请参见cascadingSectionResizes。)
QHeaderView::Fixed
用户无法调整该部分的大小。 只能使用resizeSection()以编程方式调整该部分的大小。 段大小默认为defaultSectionSize。
QHeaderView::Stretch
QHeaderView将自动调整该部分的大小以填充可用空间。 大小不能由用户或以编程方式更改。屏幕不够大时,会自动缩小,不出现滚动条。
QHeaderView::ResizeToContents
QHeaderView将自动调整该部分的大小以填充可用空间。 大小不能由用户或以编程方式更改。会出现滚动条,显示完整。
也可以混合使用。
this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
this->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
7. QSettings
要注意settings.value(“xxx/xxx”),注意节 键值使用。
8. QWidget如果visible为false, 及不可见, 其width height 不为0
9. 按照设计给予的icon大小发现背景图片background-image有重复, 设置样式时使用background-repeat
QPushButton#recordBtn:checked{
border: none;
margin:0px;
color: white;
background-image: url(:/images/images/bottom/bth_local store Pause_Default.svg);
background-repeat:none;
}
10. 注意通过connect 连接lambda表达式函数,建议需要直接写连接方式, 不然lambda函数执行所在线程就在信号所发射的线程。
connect(&m_worker2, &Worker::testSig, this, [this](int value){
qDebug() << "__FUNCTION__ Worker::testSi" << QThread::currentThreadId() << "sig: " << value;
}, Qt::QueuedConnection);
m_worker2.startSigTest();
如下图:
11. QLineEdit 之textChanged, editfinished ,textEdited 区别
QLineEdit::textChanged(const QString &text)
This signal is emitted whenever the text changes. The text argument is the new text.
Unlike textEdited(), this signal is also emitted when the text is changed programmatically, for example, by calling setText().
Note: Notifier signal for property text.
只要是text 文本内容有修改,就会触发。 如果程序性改动比如设置setText, 也会触发
QLineEdit::textEdited(const QString &text)
This signal is emitted whenever the text is edited. The text argument is the new text.
Unlike textChanged

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



