Секреты и интересные возможности Qt |
Здравствуйте, гость ( Вход | Регистрация )
Секреты и интересные возможности Qt |
SABROG |
23.2.2010, 16:36
Сообщение
#61
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Кроссплатформенный метод установки приоритета для приложени. Навеяно этим постом.
Вариант 1.
Вариант 2. Установка приоритета после входа в цикл событий.
Вариант 3. Более легковесный вариант установки приоритета после входа в цикл событий, если вместо класса Object будет какой-нибудь MainWindow.
Для Windows стоит разделять понятия "класс приоритета приложения" и "приоритет потока". Все приложения изначально получают класс приоритета NORMAL_PRIORITY_CLASS и приоритет потока THREAD_PRIORITY_NORMAL. Предположим, что мы вызываем метод QThread::setPriority(QThread::TimeCriticalPriority), чтобы выделить самый высокий приоритет. К нашему удивлению в том же TaskManager'e приоритет будет стоять "Средний". Но в Windows количество возможных приоритетов аж 31 штука. Самый высокий достигается комбинацией установки класса REALTIME_PRIORITY_CLASS и приоритета THREAD_PRIORITY_TIME_CRITICAL. В Qt нет возможности установки класса приоритета, поэтому решением может быть вызов WINAPI ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);, или установка класса через TaskManager, или установка класса приоритета в момент запуска приложения:
Установка приоритета приложения для linux может не работать в некоторых ситуациях о чем сказано в документации к метод QThread::setPriority(). Сообщение отредактировал SABROG - 23.2.2010, 16:58 |
|
|
Litkevich Yuriy |
23.2.2010, 19:22
Сообщение
#62
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Ну собственно один вариант ещё и в списке рассылке, Где создаётся пользовательское событие.
|
|
|
SABROG |
23.2.2010, 19:39
Сообщение
#63
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
SABROG |
2.4.2010, 0:05
Сообщение
#64
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Выложу сегодня 2 полезных "хака", которые могут пригодится при отладке приложения:
Первый хак - для доступа к приватным классам Qt:
Эту функцию можно использовать например для включения функционала в QLineEdit, который пишет текст типа "введите сюда что-нибудь", когда в QLineEdit ничего нет:
Или для установки своего виджета вместо QTableCornerButton в QTableView:
Второй хак - для перевода перечеслений области имен Qt в текстовые строки:
Использовать так:
Методы опробованы на Qt версии 4.6.2, в других версиях они могут не работать. Сообщение отредактировал SABROG - 3.4.2010, 8:28 |
|
|
loz |
11.4.2010, 8:56
Сообщение
#65
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 10.4.2010 Пользователь №: 1615 Спасибо сказали: 2 раз(а) Репутация: 0 |
Думаю что в данной теме необходимо упомянуть об интересной возможности Qt - функции прямого копировани участков памяти :
Данная функция копирует n байт из src в dest. Разумеется, вся ответственность за проверку размеров лежит на программисте. Для примера использования могу показать приведение типов, обычными способами которое производится довольно трудоемко, а именно - мне надо было работать со строками в их битовом представлении. В Qt есть два класса - QString и QBitArray, возможности нормальной конвертации данных между ними я найти не смог, а требование к производительности кода было достаточно высоко, пришлось сделать так:
И здесь еще есть инетересная особенность класса QBitArray, как вы заметили для обращения к данным в нем мы прибавляли к указателю 1, т.е. данны идут со второго байта, но почему? А потому, что биты из QBitArray хранятся как реальные биты, но т.к. в памяти минимальная еденица хранения - байт, то что же делать с массивом например из 9 бит? Так вот в этом первом байте как раз хранится количество используемых бит последнего байта массива. Все просто =) |
|
|
Andrewshkovskii |
17.4.2010, 15:48
Сообщение
#66
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Выложу сегодня 2 полезных "хака", которые могут пригодится при отладке приложения: Первый хак - для доступа к приватным классам Qt:
Эту функцию можно использовать например для включения функционала в QLineEdit, который пишет текст типа "введите сюда что-нибудь", когда в QLineEdit ничего нет:
Вот у меня 2 вопроса : что делает функция этого тимплейта?возвращает указатель на метод приватного класса по имени метода?(с тимплейтами знаком поверхностно, и с указателями на функции практически так же) и 2ой : Я так понимаю, метод и пропертя placeholderText для QLineEdit будет только в версии 4.7 ? |
|
|
SABROG |
19.4.2010, 12:13
Сообщение
#67
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
что делает функция этого тимплейта? Возвращает указатель, который содержится в d_ptr переменной и приводит его к одному из приватному базовому классу. Например для QLineEdit можно получить сразу 3 приватных класса: QLineEditPrivate, QWidgetPrivate, QObjectPrivate. Нужный можно выбрать. Я так понимаю, метод и пропертя placeholderText для QLineEdit будет только в версии 4.7 ? Да. |
|
|
SABROG |
24.4.2010, 11:55
Сообщение
#68
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Администратор одного программерского форума удалил мой блог, который я вел 2 года. Там был код, который я выкладывал в постах. Никакие кэши гугла и archive.org не сохранили информацию. В общем, если вы не против, то буду тут периодически выкладывать интересные/полезные решения.
--- Добавление сигнала clicked() в QLabel средствами State Machine Framework:
Добавление флагов в свой класс на базе QObject'a и вывод состояния флагов в консоль: // myclass.h
// myclass.cpp
Результат:
Сообщение отредактировал SABROG - 24.4.2010, 17:23 |
|
|
Andrewshkovskii |
24.4.2010, 12:11
Сообщение
#69
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Да, я тоже заметил, что удалили. Хотел инфу кое-какую почитать..и на тебе..А почему удалили, не сказали?
|
|
|
igor_bogomolov |
24.4.2010, 12:11
Сообщение
#70
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Цитата( SABROG) Администратор одного программерского форума удалил мой блог, который я вел 2 года . Имеешь в виду свой блог на vingrade. Очень жаль. Заглядывал иногда. Они как нибудь обосновали свои действия?З,Ы, Может и нам расширение для блогов поставить? |
|
|
Текстовая версия | Сейчас: 26.11.2024, 5:19 |