воскресенье, 21 июня 2015 г.

QToolButton + QMenu + QGridLayout



Иногда требуется создать меню которое включает в себя другие Widget'ы, приведу пример такого меню из программы psi :


рис 1. Меню которое  включает в себя Widget'ы выровненные по сетки. 

Как то я уже пытался получить ответ на официальном форуме QT, но ответа не дождался, пришлось додумывать самому как это сделать.

Вот соб-но линк по сабжу
  




Как видно из рис.1 widget'ы которые там присутствуют,  выровнены с помощью QGridLayout. Теперь код, который создает аналогичное меню.


 m_lpStatusIconMenu = new QMenu();

 QList<QString> qIconPath;
 qIconPath << ":/Icons/Icons/Images&icon/icons/angry.png"
              << ":/Icons/Icons/Images&icon/icons/bat.png";

 //Создаем Layout сетку
 QGridLayout *Layout = new QGridLayout(ui->toolButton_2);
 //Создаем кнопку
 QToolButton * lpButton = new QToolButton(this);

 //Устанавливаем у кнопки стиль(border(рамка) = 0 px) 
 lpButton->setStyleSheet("border: 0px solid #8f8f91; border-radius: 20px");
 //Устанавливаем иконку
 lpButton->setIcon(QIcon(qIconPath.at(0)));
 //Добавляем в "сетку" где 0, 0 это позиция строка и столбец.
 Layout->addWidget(lpButton, 0, 0);
 //Создаем еще одну кнопку
 lpButton = new QToolButton(this);
 //Устанавливаем иконку
 lpButton->setIcon(QIcon(qIconPath.at(1)));
 //Устанавливаем иконку
 Layout->addWidget(lpButton, 0, 1);
 //Добавляем в "сетку" где 0, 1 это позиция строка и столбец.

 //Теперь нашу сетку добавляем непосредственно в меню, которое будет показываться.
 m_lpStatusIconMenu->setLayout(Layout);
 //И это меню устанавливаем для кнопки QToolButton.
 ui->toolButton_2->setMenu(m_lpStatusIconMenu);

Результат работы :

Как можно наблюдать 1 иконка не имеет рамки 
т.к StyleSheet задан явно.
Вот таким вот способом можно комбинировать, 
добавляя в меню различные widget'ы.






вторник, 16 июня 2015 г.

Мини взгляд на работу файловых систем.

Мини взгляд на работу файловых систем.

Файловая система является неотъемлемой частью ос. Основные задачи файловой системы это структурирование каталогов, файлов. Файловая система хранит описатели объектов, где и сколько места занимает файл на физическом диске. Более подробное определение файловой системе дает www.wikipedia.ru :
Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имен файлов и каталогов, максимальный возможный размер файла и раздела, набор атрибутов файла. В ОС Windows файловая система называется NTFS. Различные ос, использует разные файловые системы.
            Файловые системы обычно можно представить в виде дерева :



Рис. 2.32. Логическая организация файловой системы
а - одноуровневая; б - иерархическая (дерево); в - иерархическая (сеть)


Виртуальная файловая система.

VFS (Virtual File System) - виртуальная файловая система, которую я хочу рассмотреть, отличается тем, что работает в оперативной памяти. Представьте что у вас есть какой сервер который хранит каталоги и файлы в них, непосредственно в оперативной памяти. Попробуем написать такую fs.. 



#define MAX_NAME 255      //Максимальная длина имени каталога/файла.
#define INVALIDE_VFS 0       //Признак ошибки