Читаем QT 4: программирование GUI на С++ полностью

Слот paste() соответствует пункту меню Edit | Paste (Правка | Вставить). Мы считываем текст из буфера обмена и вызываем статическую функцию QString::split() для разбиения строки и представления ее в виде списка QStringList. Каждая строка таблицы представлена в этом списке одной строкой.

Затем мы определяем размеры области копирования. Номер строки в таблице является номером строки в QStringList; номер столбца является номером символа табуляции в первой строке плюс 1. Если выделена только одна ячейка, мы используем ее в качестве верхнего левого угла области вставки; в противном случае мы используем текущую выделенную область для вставки.

При выполнении операции вставки мы в цикле проходим по строкам и разбиваем каждую строку на значения ячеек, снова используя функцию QString::split(), но теперь в качестве разделителя применяется знак табуляции. Рис. 4.6 иллюстрирует эти действия.

Рис. 4.6. Вставка текста из буфера обмена в электронную таблицу.

01 void Spreadsheet::del()

02 {

03 foreach (QTableWidgetltem *item, selectedItems())

04 delete item;

05 }

Слот del() соответствует пункту меню Edit | Delete (Правка | Удалить). Для очистки ячеек достаточно использовать оператор delete для каждого объекта Cell. Объект QTableWidget замечает, когда удаляются его элементы QTableWidgetltem, и автоматически перерисовывает себя, если какой-нибудь из элементов оказывается видимым. Если мы вызываем функцию cell(), указывая координаты удаленной ячейки, то она возвратит нулевой указатель.

01 void Spreadsheet::selectCurrentRow()

02 {

03 selectRow(currentRow());

04 }

05 void Spreadsheet::selectCurrentColumn()

06 {

07 selectColumn(currentColumn());

08 }

Функции selectCurrentRow() и selectCurrentColumn() соответствуют пунктам меню Edit | Select | Row и Edit | Select | Column (Правка | Выделить | Строка и Правка | Выделить | Столбец). Здесь используется реализация функций selectRow() и selectColumn() класса QTableWidget. Нам не требуется реализовывать функциональность пункта меню Edit | Select | All (Правка | Выделить | Все), поскольку она обеспечивается в QTableWidget унаследованной функцией QAbstractItemView::selectAll().

01 void Spreadsheet::findNext(const QString &str, Qt::CaseSensitivity cs)

02 {

03 int row = currentRow();

04 int column = currentColumn() + 1;

05 while (row < RowCount) {

06 while (column < ColumnCount) {

07 if (text(row, column).contains(str, cs)) {

08 clearSelection();

09 setCurrentCell(row, column);

10 activateWindow();

11 return;

12 }

13 ++column;

14 }

15 column = 0;

16 ++row;

17 }

18 QApplication::beep();

19 }

Слот findNext() в цикле просматривает ячейки, начиная с ячейки, расположенной правее курсора, и двигается вправо до достижения последнего столбца; затем процесс идет с первого столбца строки, расположенной ниже, и так продолжается, пока не будет найден требуемый текст или пока не будет достигнута самая последняя ячейка. Например, если текущей является ячейка C24, поиск будет продолжаться по ячейкам D24, E24, … Z24, затем no A25, B25, C25, … Z25 и так далее, пока не будет достигнута ячейка Z999. Если соответствующее значение найдено, мы сбрасываем текущее выделение и перемещаем курсор на ячейку, в которой оно находится, и делаем активным окно, содержащее эту электронную таблицу Spreadsheet. При неудачном завершении поиска мы заставляем приложение выдать соответствующий звуковой сигнал.

01 void Spreadsheet::findPrevious(const QString &str, Qt::CaseSensitivity cs)

02 {

03 int row = currentRow();

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных