Двоичное представление типов в Qt достаточно сильно усовершенствовалось со времени выхода версии Qt 1.0. Такая тенденция, вероятно, сохранится в будущих версиях Qt, чтобы идти вровень с развитием существующих типов и обеспечить новые типы в Qt. По умолчанию класс
Класс
01 bool Spreadsheet::readFile(const QString &fileName)
02 {
03 QFile file(fileName);
04 if (!file.open(QIODevice::ReadOnly)) {
05 QMessageBox::warning(this, tr("Spreadsheet"),
06 tr("Cannot read file %1:\n%2.")
07 .arg(file.fileName())
08 .arg(file.errorString()));
09 return false;
10 }
11 QDataStream in(&file);
12 in.setVersion(QDataStream::Qt_4_1);
13 quint32 magic;
14 in >> magic;
15 if (magic != MagicNumber) {
16 QMessageBox::warning(this, tr("Spreadsheet"),
17 tr("The file is not a Spreadsheet file."));
18 return false;
19 }
20 clear();
21 quint16 row;
22 quint16 column;
23 QString str;
24 QApplication::setOverrideCursor(Qt::WaitCursor);
25 while (!in.atEnd()) {
26 in >> row >> column >> str;
27 setFormula(row, column, str);
28 }
29 QApplication::restoreOverrideCursor();
30 return true;
31 }
Функция
Если в начале файла содержится правильное «волшебное» число, мы вызываем функцию
Реализация меню Edit
Теперь мы готовы приступить к реализации слотов, относящихся к меню Edit данного приложения.
01 void Spreadsheet::cut()
02 {
03 copy();
04 del();
05 }
Слот
01 void Spreadsheet::copy()
02 {
03 QTableWidgetSelectionRange range = selectedRange();
04 QString str;
05 for (int i = 0; i < range.rowCount(); ++i) {
06 if (i > 0)
07 str += "\n";