QT界面

2020-02-05  本文已影响0人  行走的代码

ui_widget.h文件

ui文件经过uic编译后,根据窗体上的组件及其属性、信号与槽的关联等自动生成的一个类的定义文件,类的名称是Ui_Widget。

exec()

进入 Qt 应用程序的事件循环函数等待用户操作,如果用户点击窗口的关闭按钮, 程序就会自动结束并返回一个值,默认是 0 。

编译.qrc

rcc工具会对.qrc文件里引用的资源压缩转二进制数据,并放到.cpp文件里面作为静态数据。接下来和其他c++文件同样的编译、链接进入目标文件。

问题:自定义控件时基类用了QWidget,发现qss设置不起作用

需要重载其paintEvent函数

    QStyleOption opt;

    opt.init(this);

    QPainter p(this);

    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

布局器工作原理

① 最小尺寸和最大尺寸,控件尺寸会限定在最小尺寸和最大尺寸之间。
② 建议尺寸 QWidget::sizeHint(),这个建议尺寸是后续尺寸调整的基础,在布局时会先给控件分配建议尺寸的空间。
③ 伸展因子(stretch factors),根据伸展因子的比例分配新增的空闲空间给各个控件。
④ 尺寸策略 QWidget::sizePolicy(),在上述处理之后,那么再根据各个控件的尺寸调整策略决定控件应该尽可能拉伸还是尽量不拉伸。

关于4策略的设置建议:
① 如果希望控件尺寸在水平或垂直方向固定住,那么把该维度的策略设置为 QSizePolicy::Fixed。
② 如果希望控件被动拉伸,其他控件不需要空间时这个控件才会占据新增区域,那么可以用 QSizePolicy::Preferred (尺寸下限是隐含的最小建议尺寸)或者 QSizePolicy::Minimum(尺寸下限是建议尺寸)。
③ 如果希望控件尽量拉伸,主动扩张,那就把策略设置为 QSizePolicy::Expanding。

基于条目的控件

① QXXXWidget中,条目 QXXXWidgetItem 仅仅是数据,不是控件或子控件,列表控件根据多个 QXXXWidgetItem 对象,来呈现条目里的数据,只有QXXXWidget自己是控件实体;
② QXXXWidgetItem,内部的数据大致分为两类:第一类是以数据角色形式管理的通用数据,这些数据自动参与 QDataStream 数据流的读写;第二类是非通用数据,不参与数据流读写;
③ 表格控件中,setCurrentCell和setCurrentItem的区别:名字带 Cell 的函数是基于单元格的,对 NULL 空单元格也可以使用;而名字带 Item 的函数,必须是填充了实体条目的单元格,针对实际存在的单元格条目操作。

QWindow和QWidget区别

https://stackoverflow.com/questions/17860604/what-is-the-difference-between-a-qwindow-and-qwidget
简而言之,QWindow是QT5.0版本QWidget从QGUI库分离后的产物,目的是在不基于QWidgets库的工程中,提供顶层窗口实现的抽象。大部分情况下不建议用QWindow,只有在用OpenGl或D3D绘制纯渲染窗口时,为了减少依赖可以用QWindow,因为不需要加载QWidgets等一堆其他的库。

从QWindow到QWidget(Qt5)

https://blog.csdn.net/dbzhang800/article/details/7010114

QWidget官方文档翻译

https://blog.csdn.net/t46414704152abc/article/details/51057946

Qt 之 模态、非模态、半模态窗口的介绍

https://www.cnblogs.com/senior-engineer/p/9629612.html

双缓冲绘图

在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图。使用双缓冲,可以减轻绘制的闪烁感。在有些情况下,用户要关闭双缓冲,自己管理绘图。下面的语句设置了窗口部件的Qt::WA_PaintOnScreen属性 ,就关闭了窗口部件的双缓冲。
widget->setAttribute(Qt::WA_PaintOnScreen);
Qt4不再提供异或笔,组合模式QPainter::CompostionMode_Xor()并不是异或笔,Qt4只提供了QRubberBand实现矩形和直线的绘图反馈。要实现在绘图中动态反馈必须使用其他方法。程序中使用双缓冲来解决这个问题。在绘图过程中,一个缓冲区绘制临时内存,一个缓冲区保存绘制好的内容,最后进行合并。
在交互绘图过程中,程序将图像缓冲区复制到临时缓冲区,并在临时缓冲区上绘制,绘制完毕在将结果复制到图像缓冲区,如果没有交互复制,则直接将图像缓冲区绘制显示到屏幕上。

QT Widgets 和 QT Quick 的区别和适用场景

https://www.bilibili.com/video/av582748160?zw

不建议用QT设计工具生成界面

原因主要有两个:

  1. 通常项目中会有自定义控件需求,自定义控件在设计器上无法展示;
  2. 很多复杂界面,是动态生成的,设计器比较适合静态UI。
上一篇下一篇

猜你喜欢

热点阅读