The OpenNET Project
 
Поиск (ключи):  ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
ССЫЛКИ НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

3.4. Настройка строки состояния.

На этом мы заканчиваем описание настройки меню и панели инструментов, и переходим к строке состояния. В обычном режиме строка состояния содержит три индикатора: номер текущей ячейки, формула в текущей ячейке и MOD -- признак того, что файл был изменен. Но помимо этого строка состояния может использоваться для отображения подсказок и других сообщений.

Обычный режим.


Подсказка


Сообщение


Рисунок 3.13. Строка состояния.

Создается и настраивается строка состояния в функции createStatusBar(), которая вызывается из конструктора MainWindow:

void MainWindow::createStatusBar() 
{ 
  locationLabel = new QLabel(" W999 ", this); 
  locationLabel->setAlignment(AlignHCenter); 
  locationLabel->setMinimumSize(locationLabel->sizeHint()); 
  
  formulaLabel = new QLabel(this); 
  
  modLabel = new QLabel(tr(" MOD "), this); 
  modLabel->setAlignment(AlignHCenter); 
  modLabel->setMinimumSize(modLabel->sizeHint());      
  modLabel->clear(); 
  
  statusBar()->addWidget(locationLabel); 
  statusBar()->addWidget(formulaLabel, 1); 
  statusBar()->addWidget(modLabel); 
  
  connect(spreadsheet, SIGNAL(currentChanged(int, int)), 
          this, SLOT(updateCellIndicators())); 
  connect(spreadsheet, SIGNAL(modified()), 
          this, SLOT(spreadsheetModified())); 
  updateCellIndicators(); 
}
      
Она возвращает указатель на созданный ею компонент - строку состояния. (Компонент строки состояния создается автоматически, при первом вызове функции statusBar().) Индикаторы -- это простые метки (QLabel), текст в которых изменяется по мере необходимости. Во время создания, меткам передается указатель на "владельца" (this), хотя в этом нет особой необходимости, поскольку QStatusBar::addWidget() "переподчиняет" их автоматически, назначая в качестве "владельца" сам компонент строки состояния.

Из рисунка 3.13 видно, что метки имеют различные размеры. Адрес ячейки и индикатор MOD -- самые короткие, а метка, отображающая действующую в ячейке формулу, самая длинная. Кроме того, при изменении размеров окна, все дополнительное пространство должно выделяться именно ей. Такое поведение достигается за счет указания фактора "stretch" (значение 1 в вызове QStatusBar::addWidget()). Для других двух меток этот фактор по-умолчанию принимается равным нулю, что означает фиксированный размер меток.

Когда QStatusBar размещает виджеты, он сначала выделяет место для "нерастягиваемых" компонентов (выделяя им "идеальный" размер, определяемый вызовом QWidget::sizeHint()), а затем все остальное пространство отдается "растягиваемым" виджетам. "Идеальный" размер, в свою очередь, зависит от содержимого виджетов и меняется при изменении содержимого. Задавая начальные значения меток ("W999" и "MOD"), мы тем самым определяем их минимально возможный размер.

В конце функции мы выполняем соединения между сигналами Spreadsheet к двум слотам MainWindow: updateCellIndicators() и spreadsheetModified().

void MainWindow::updateCellIndicators() 
{ 
  locationLabel->setText(spreadsheet->currentLocation()); 
  formulaLabel->setText(" " + spreadsheet->currentFormula()); 
}
      
Слот updateCellIndicator() обновляет метки, которые отображают адрес текущей ячейки и действующую в ней формулу. Он вызывается всякий раз, когда пользователь переходит из одной ячейки в другую. Кроме того, он вызывается как обычная функция, в конце createStatusBar(), для инициализации меток. Это совершенно необходимо, так как Spreadsheet не выдает сигнал currentChanged() во время инициализации.
void MainWindow::spreadsheetModified() 
{ 
  modLabel->setText(tr("MOD")); 
  modified = true; 
  updateCellIndicators(); 
}
      
Слот spreadsheetModified() обновляет все три индикатора и устанавливает признак modified в true. (Эта переменная используется для определения несохраненных изменений).


Подпишись на Linux Format и получи один из 3 ценных призов!

Началась подписка на журнал Linux Format на 2010 год. Спешите оформить подписку на единственный в России ежемесячный журнал о Linux!

Все, оформившие подписку на печатную версию журнала, получают диск с архивом журнала Linux Format за 2005-2009г. в подарок. Также в подарок вы получаете именную электронную версию в формате PDF. Теперь вы можете приступить к чтению журнала сразу в момент выхода свежего номера, не дожидаясь, пока вам доставят бумажную версию.

Кроме того, все, оформившие подписку на первую половину или весь 2010 год в интернет-магазине ГНУ/Линуксцентра, автоматически становятся участниками розыгрыша ценных призов:


  Закладки на сайте
  Проследить за страницей
Created 1996-2010 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList