这里是拿到一个小型demo,进行分析。
对CheckHeaderView的解析
- 在QTableView等View类中,头部(可能是水平或垂直)都是由QHeaderView来管理的。
QtCheckHeaderView *header = new QtCheckHeaderView(Qt::Horizontal, tableView);
QStandardItem *root = model->invisibleRootItem();
对于每个顶层item,其实它都是一个不可见item的子item,如果想要便利所有顶层item,可以使用如下方法。
QStandardItemModel* model = new QStandardItemModel;
QStandardItem* rootItem = model->invisibleRootItem();
for (int i = 0; i < rootItem->rowCount(); ++i)
{
for (int j = 0; j < rootItem->columnCount(); ++j)
{
QStandardItem* item = rootItem->child(i, j);
//do somting ...
}
}
itemFromIndex(const QModelIndex &index) const
通过QModelIndex来获取item,QModelIndex 是一个用于定位item的类。- QVBoxLayout:在垂直的方向上排列控件 上下排列。
知识复习
- QLCDNumber控件用于显示一个LCD数字。 QLCDNumber会将非法字符替代为空格。
- QProgressBar部件提供了一个水平或垂直进度条,进度条用于给用户操作一个进度指示,并向它们说明应用程序仍在运行。
- 不同的需求所需要的布局效果不同。
- 流布局管理器在整个容器中的布局正如其名,像“流”一样从左到右摆放组件,直到占据了这一行的所有空间,然后再向下移动一行。
public FlowLayout()
public FlowLayout(int alignment)
public FlowLayout(int alignment, int horizGap, int vertGap)
构造方法中的alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置。alignment为0时,每一行的组件将被指定按照左对齐排列;alignment为2时,每一行的组件将被指定按照右对齐排列;alignment为1时,每一行的组件将被指定按照居中对齐排列;
- 自定义控件(提升)的方式。
- ui的控件和自定义控件的父类(基类)要一样。
- evenFilter()事件过滤器。
- event()只对本定义控件有利。
- 重写虚函数必须和基类中的虚函数一致。