Subclassing QTableWidget
在空的Cell 上输入文字时,QTableWidget 会自动创建QTableWidgetItem 以存储文本。
QTableWidgetItem 不是Widget 类,它是纯数据类。Cell 类派生自QTableWidgetItem
Spreadsheet::Spreadsheet(QWidget *parent)
setItemPrototype(new Cell);
setSelectionMode(ContiguousSelection); // allow a single rectangular selection ???
用户在Cell 上输入数据时,我们希望QTableWidget 自动创建Cell 类而不是QTableWidgetItem 用来存储文本,setItemPrototype() 函数可以完成你的愿望。
setRowCount(0);
setColumnCount(0);
setRowCount(RowCount);
setColumnCount(ColumnCount);
要清除Cell 数据先把行列设成0,再恢复原值既可。
QTableWidget 拥有多个子Widget,顶部横向的QHeaderView,左侧纵向的QHeaderView,还有两个QScrollBars(位于右边和下面);
QTableWidget 的中心位置是一个viewport,这里是绘制单元格的地方。
QTableWidgetItem::formula(),多数情况下formula 和text 是一样的,比如输入"hello",输出也是"hello"。
但是另一些例外:输入"1.5",formula 返回double 值1.5,并且以右对齐的方式在单元格中渲染。
If the formula starts with a single quote,formula 返回的是text。如输入"12345",返回字符串"12345"
void Spreadsheet::setFormula(int row, int column,
const QString &formula)
{
Cell *c = cell(row, column);
if (!c) {
c = new Cell;
setItem(row, column, c);
}
c->setFormula(formula); // c 这个单元格的值从A1 和A2 计算出来,用公式"=A1+A2"
}
如果formula 以一个"=" 开始,将被当做一个计算式。例如, A1,A2 两个单元格的数据分别是"12" 和"6",公式 "=A1+A2" 计算出 18
QTableWidgetItem 不只包含数据,还存储了一些属性,如字符串,字体,颜色,icon,以及一个指向QTableWidget 的指针。