Qt4编程基本.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:40 大小:269KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Qt4编程基本.ppt

Qt4编程基本.ppt

预览

免费试读已结束,剩余 30 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

4.1中央窗口部件4.2子类化QTableWidget让我们一起来实现SpreadSheet,首先看他的头文件。头文件是从Cell和SpreadsheetCompare类的前置声明开始的:Spreadsheet提供了许多实现Edit、Tools和Options菜单中的动作的槽,并且它也提供了一个modified()信号,用来告知用户可能已经发生的任何变化。在这个类的私有段中,声明了3个常量、4个函数和一个变量。下面是它的实现文件:通常情况下,当用户在一个空单元格中输入一些文本的时候,QTableWidget将会自动创建一个QTableWidgetItem来保存这些文本。同样是在构造函数中,我们将选择模式设置为QAbstractItemView::ContiguousSelection,从而可以允许简单矩形选择框方法。clear()函数是从Spreadsheet构造函数中得到的调用的,用来初始化电子制作软件。它也会在MainWindow::newFile()中得到调用。图4.2构成QTableWidget的各个窗口部件text()私有函数可以返回给定单元格中的文本。currentLocation()函数返回当前单元格的位置,它是按照电子制表软件的通常格式,也就是一个列字母跟上行号的形式来表示这个位置的值。currentFormula()函数返回当前单元格的公式。4.3载入和保存for(introw=0;row<RowCount;++row){for(intcolumn=0;column<ColumnCount;++column){QStringstr=formula(row,column);if(!str.isEmpty())out<<quint16(row)<<quint16(column)<<str;}}QApplication::restoreOverrideCursor();returntrue;}Spreadsheet应用程序的文件格式是相当简单的。一个Spreadsheet文件以一个32位数字作为文件的开始,由它确定文件的格式。然后是连续的数据块,每一数据块都包含了用于一个单元格中的行、列和公式。为了节省空间,我们没有输出空白单元格。该文件格式如图4.3所示:readFile()函数与writeFile()函数非常相似。QApplication::setOverrideCursor(Qt::WaitCursor);while(!in.atEnd()){in>>row>>column>>str;setFormula(row,column,str);}QApplication::restoreOverrideCursor();returntrue;}4.4实现Edit菜单copy()槽能偶对Edit->Copy做出响应。它会遍历当前选择。每一个选中单元格的公式都会被添加到一个QString中,行与行之间利用换行符“\n”分隔,列与列之间则以制表符“\t”来分隔。图4.5给出了这一实现方法的示意图。函数QTableWidget::selectRanges()返回一个选择范围列表。paste()槽对Edit->Paste()菜单选项做出响应。为了执行粘贴操作,我们遍历所有行并且再次使用QString::split()把它们分隔到每一个单元格中,但是这次以要把制表符“\t”当作分隔符。图4.6给出了这以过程中所使用的步骤。del()槽对Edit->Delete菜单选项做出响应。如果有选中的项,那么就会删除它们并且调用somethingChanged()函数。对选择中的每一个Cell对象使用delete足以清空所有这些单元格。findNext()槽会遍历单元格一遍,它从当前光标右侧的单元格开始遍历到这一行的最后一列,然后再从下一行的第一个单元格开始继续遍历,如此反复,直到找到所要查找的文本,或者是直到最后一个单元格为止。findPrevious()槽与findNext()槽相似,区别之处是它会向相反的方向遍历并且会在单元格A1处停下来。4.5实现其他菜单setAutoRecalculate()槽对Options->Auto-Recalculate菜单选项做出响应。如果启动了这个特性,则会立即重新计算整个电子制表软件以确保它是最新的,然后,recalculate()会自动在somethingChanged()得到调用。qStableSort(rows.begin(),rows.end(),compare);for(i=0;i<range.rowCount();++i){for(intj=0;j<range.columnCount();++j)setFormula(range.topR