Секреты и интересные возможности Qt |
Здравствуйте, гость ( Вход | Регистрация )
Секреты и интересные возможности Qt |
SABROG |
24.4.2010, 15:44
Сообщение
#71
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Администратор это объяснил так:
Цитата Все блоги, которые давно не обновлялись, и те, что использовались только для SEO были удалены. Для SEO я блог не использовал. Обновлялся он конечно не часто, но это не повод удалять полезную информацию у которой нет срока давности. Сообщение отредактировал SABROG - 24.4.2010, 15:45 |
|
|
SABROG |
26.5.2010, 17:27
Сообщение
#72
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
На заметку:
Заполняем Qt контейнер без for:
Ищем элемент контейнера удовлетворяющий нашим требованиям без for используя предикат: // поиск первого неактивного (Disabled) виджета через аттрибуты
Передача указателя на метод класса для QtConcurrent::mapped() вместо обычной функции:
Сообщение отредактировал SABROG - 26.5.2010, 20:17 |
|
|
Litkevich Yuriy |
26.5.2010, 19:17
Сообщение
#73
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а зачем в
struct testAttributePredicate оператор operator()(QWidget* widget) ? |
|
|
SABROG |
26.5.2010, 20:13
Сообщение
#74
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
а зачем в struct testAttributePredicate оператор operator()(QWidget* widget) ? Так это обычный функтор, в функции find_if я создаю объект, передавая в конструктор параметр (аттрибут), который нужно искать, а стандартная библиотека в своем шаблоне осуществляет вызов уже через перегруженный оператор: // приблизительное поведение (не исходный код шаблона find_if)
|
|
|
SABROG |
21.6.2010, 18:23
Сообщение
#75
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Реализовал установку приоритета потока в параллельном программировании.
Как многие заметили в Qt есть метод QThread::setPriority(), а вот как задать приоритет потоку запущенному например через QtConcurrent::run() не понятно. В новом стандарте C++0x будет метод std::call_once, который является потокобезопасной функций для выполнения определеннной функции один лишь раз. Аналогичная функция есть и в BOOST'e. Посмотрев на код функции я пришел к выводу, что проще переписать её на Qt, чем заставлять людей тащить с собой BOOST. С другой стороны моя реализация получилась в 2 раза быстрей BOOST'овской, но медленней std::call_once. Связано это со скудными возможностями класса QAtomicInt, там где я бы мог обойтись быстрыми атомарными операциями загрузки (load) и сохранения (store), мне пришлось импровизировать и использовать более медленные атомарные методы (fetchAndStoreAcquire, fetchAndStoreRelease). call_once.h
call_once_test.cpp
P.S.: функция также может пригодится для создания потоко-безопасных синглтонов.
Прикрепленные файлы
|
|
|
kuzulis |
21.6.2010, 18:54
Сообщение
#76
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
SABROG, а с Троллями (нокией) пробовали это обсудить? Мож они включат это в свой код?
|
|
|
SABROG |
22.6.2010, 11:19
Сообщение
#77
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
SABROG |
23.6.2010, 14:52
Сообщение
#78
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
В старом проекте на Borland Builder C++ у меня были кнопочки со стилем csFramed. Захотелось узнать возможно ли такие сделать в Qt. Нашел флаг для свойства border в qss - groove, но как выяснислось в нем нельзя задать контрастные цвета например черный и белый. То есть задать можно один цвет на основе которого вычисляется второй. Цвета типа черный или белый не подходят, создается просто черный бордюр. Пришлось написать собственную версию:
qss
Сообщение отредактировал SABROG - 23.6.2010, 18:11 |
|
|
SABROG |
25.6.2010, 11:57
Сообщение
#79
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Продолжил издеваться над кнопками и qss:
qss
|
|
|
Алексей1153 |
1.8.2010, 11:53
Сообщение
#80
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Обнаружил любопытный спецэффект: если в качестве подменю (QMenu) задать элементу другое предыдущее по иерархии меню, то при выборе пункта все предыдущие подменю изчезают с экрана и показывается указанное ))
К примеру: ---------------- m1 ---------------- A1 > (m2) A2 A3 ---------------- отделено от темы "Создание вложенного действия QAction" ---------------- m2 ---------------- A4 A5 > (m1) A6 ---------------- Выбор пунктов A1>A5 покажет на экране опять таки меню m1 --------------------------------------------------- Уточнил - не всё так радужно.
1) если в в любом вложенном меню указать меню первого уровня в качестве вложенного далее, то выбор этого пункта закроет все подменю и покажет только меню первого уровня 2) если так же указать одно из промежуточных подменю, то ничего не произойдёт 3) если так же указать самого себя в качестве подменю, то просто переоткроется (визуально ничего не произойдёт, кроме того, что подсветка в текущеи открытом подменю прыгнет наверх) 4) если так же указать не учавствовавшее в цепочке подменю, оно просто откроется как вложенное Сообщение отредактировал Алексей1153 - 1.8.2010, 18:48 |
|
|
Текстовая версия | Сейчас: 23.11.2024, 11:53 |