crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Секреты и интересные возможности Qt
void*
  опции профиля:
сообщение 23.7.2008, 22:28
Сообщение #1


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


Предлагаю в данную тему скидывать все известные вам интересные фичи и "секреты" Qt. Думаю, так можно собрать неплохую коллекцию интересных возможностей Qt, где каждый сможет найти что-нибудь интересное для себя или узнать новое. Начну сам:
1) Макрос Q_UNUSED позволяет избежать предупреждений по поводу неиспользования какой-то переменной. Пример:
void someFunc(int var) {
     Q_UNUSED(var); //тут мы избавлемся от возможного предупреждения от компилятора
}

2) Функция QString Qt::escape(const QString &plain) позволяет конвертировать в строке, задаваемую параметром plain метасимволы HTML (<, >, &) в их HTML-эквиваленты. Пример:
QString plain = "#include <QtCore>"
QString html = Qt::escape(plain);  // html == #include <QtCore>

3) Макрос Q_PROPERTY позволяет в некоторых случаях избежать приведения. Пример:
class SomeClass : public QObject {
     Q_OBJECT
     Q_PROPERTY(bool prop READ prop WRITE setProp);
private:
     bool var;
public:
     SomeClass() : var(true) { }
     bool prop() const { return var; }
     void setProp(bool newValue) { var = newValue; }
};
//а теперь, имея указатель на QObject, мы можем изменять значения переменных унаследованного класса:
SomeClass *sc = new SomeClass;
QObject *obj = sc;
obj->setProperty("prop", true); //тоже самое, что и sc->setProp(true);


to be continued...

P.S. Надеюсь тема не умрет, и каждый будет ее поддерживать своими находками :)

-----------------------
Ссылки на интересные возможности:
1) QComboBox-Изменение размера выпадающего списка
2) qmake, как обратится к текущему каталогу?

Сообщение отредактировал Litkevich Yuriy - 31.1.2009, 12:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 20.6.2009, 15:02
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Немного про нормализацию сигнатур. Мое внимание привлекло требование о необходимости нормализовывать все сигнатуры прежде чем использовать connect при изменении исходников Qt.

Нормализация представляет собой парсинг строки, уменьшение её длинны путем удаления лишних пробельных символов. Перестановка ключевых слов для оптимизации поиска нужного сигнала или слота у QObject'a. Подобный разбор происходит каждый раз, когда мы используем connect. Макросы SIGNAL() и SLOT() не дают нам нормализованную строку, они нам дают просто строку типа:

2mysignal(QString, QString)


После нормализации (QObject::normalizeSignature()) видно, что один пробел пропал:

2mysignal(QString,QString)


И т.п. В составе Qt появилась утилита /util/normalize, она пробегается по исходникам и заменяет макросы SIGNAL()/SLOT() на нормализованные сигнатуры, что сказывается на скорости соединения сигналов и слотов. Вероятно, в программах, где идет постоянное соединение/разъединение это помогло бы немного выйграть в скорости.

P.S.: однако мне не понятно, почему тролли не изменили moc компилятор таким образом, чтобы это делалось всегда на автомате.

Сообщение отредактировал SABROG - 20.6.2009, 16:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- void*   Секреты и интересные возможности Qt   23.7.2008, 22:28
- - AD   P.S. Мне кажется тему можно вверху прикрепить...   24.7.2008, 9:29
|- - Tonal   Цитата(AD @ 24.7.2008, 13:29) Не знаю, во...   24.7.2008, 10:16
|- - AD   Цитата(Tonal @ 24.7.2008, 11:16) Оно впол...   24.7.2008, 10:33
|- - Tonal   Цитата(AD @ 24.7.2008, 14:33) Цитата(Tona...   24.7.2008, 11:48
- - Litkevich Yuriy   void*, для 1-го пункта часто имя переменной комент...   24.7.2008, 9:36
- - void*   LitkevichВ Yuriy, приколупался лучше бы продолжил...   24.7.2008, 10:09
- - ЙаМайскЫйПчОЛ   Цитата(AD @ 24.7.2008, 10:29) Не знаю, во...   24.7.2008, 11:12
- - void*   Собственно продолжение. Простенький пример того, ч...   25.7.2008, 23:26
- - Петров Виталий   Тоже поделюсь парой интересных моментов. 1) Если ...   18.9.2008, 8:31
- - void*   также можно регулировать прозрачность любого окошк...   23.9.2008, 20:11
- - Litkevich Yuriy   Цитата(kwisp @ 26.11.2008, 20:58) ... изв...   1.12.2008, 18:59
- - SABROG   Использовать QLatin1String вместо QString где это ...   8.12.2008, 16:05
- - molchanoviv   Только прирост этот будет незаметен. Так зачем это...   8.12.2008, 16:11
|- - SABROG   Цитата(molchanoviv @ 8.12.2008, 16:11) То...   8.12.2008, 16:17
- - SABROG   К теме о сигналах. Бывают случаи, когда надо испус...   8.12.2008, 16:44
- - SABROG   В Qt есть возможность использовать системные иконк...   8.12.2008, 18:01
- - SABROG   В Qt можно соединять не только сигнал со слотом, н...   9.12.2008, 14:31
- - Admin   Треп перенесен в тему Треп из темы Секреты и инте...   9.12.2008, 15:59
- - Litkevich Yuriy   обнаружил интересное поведение в QTableView если в...   5.2.2009, 19:45
|- - Yuriy   [quote name='Litkevich Yuriy' date='5....   20.12.2010, 14:57
- - SABROG   Не знаю куда это отнести к секретам или интересным...   9.2.2009, 20:43
- - Константин   ну и секреты у вас но всё-равно внесу свои пять к...   11.2.2009, 6:15
- - Admin   Перенес обсуждение не относящееся к данной теме в ...   11.2.2009, 16:35
- - SABROG   Еще один способ вывода отладочных сообщений для GU...   27.2.2009, 10:08
|- - BRE   Цитата(SABROG @ 27.2.2009, 10:08) Еще оди...   13.3.2009, 13:09
- - CrackedMind   Вообще этого будет более чем достаточно ЦитатаQErr...   13.3.2009, 12:59
- - SABROG   Добавлю метод альтернативный методу QTimer::single...   13.3.2009, 14:49
|- - PUMA   Цитата(SABROG @ 13.3.2009, 14:49) Добавлю...   30.4.2015, 1:30
- - SABROG   Пожалуй вопрос с enum'ом сюда помещу. В общем ...   13.3.2009, 20:18
- - Litkevich Yuriy   Интересная особенность Qt Designer'а   16.3.2009, 12:12
- - SABROG   Немножко заморочился на тему создания и извлечения...   20.3.2009, 15:02
|- - AD   SABROG, напиши, пожалуйста, тут о тех двух функция...   20.3.2009, 15:12
|- - SABROG   Цитата(AD @ 20.3.2009, 15:12) SABROG, нап...   20.3.2009, 15:15
|- - AD   Да нет! Я про аналоги getenv!!!...   20.3.2009, 16:40
- - SABROG   В Qt есть недокументированные кроссплатформменные ...   20.3.2009, 17:11
- - Litkevich Yuriy   Цитата(SABROG @ 20.3.2009, 20:11) В Qt ес...   20.3.2009, 17:43
- - SABROG   Для тех кто помешан на обезжиривании Qt. Вместе ...   20.3.2009, 22:06
- - Litkevich Yuriy   любопытно   20.3.2009, 22:21
|- - SABROG   Цитата(Litkevich Yuriy @ 20.3.2009, 22:21...   22.3.2009, 16:28
- - ViGOur   Тянет на статью в wiki.   22.3.2009, 17:18
- - Litkevich Yuriy   Цитата(ViGOur @ 22.3.2009, 20:18) Тянет н...   22.3.2009, 17:24
- - CrackedMind   Лишь одно скажу. Если конфигурировать сразу так бе...   23.3.2009, 9:25
- - Litkevich Yuriy   Эх, как бы всё это разгрести. Я уже несколько раз ...   2.4.2009, 18:30
- - Litkevich Yuriy   Ковырялся с документацией Qt 4.6 и сделал для себя...   5.4.2009, 9:56
- - CrackedMind   А кто-нибудь обратил внимание, что в 4.5 появились...   11.4.2009, 23:06
- - Sokoloff   Обнаружил тут, что QImage умеет читать postscript ...   6.5.2009, 9:47
- - Litkevich Yuriy   Цитата(Sokoloff @ 6.5.2009, 13:47) ghosts...   6.5.2009, 10:06
- - Sokoloff   Цитата(Litkevich Yuriy @ 6.5.2009, 11:06)...   6.5.2009, 10:18
- - SABROG   Думаю никто не будет против, если я буду использов...   8.5.2009, 21:50
- - SABROG   Немного про нормализацию сигнатур. Мое внимание пр...   20.6.2009, 15:02
- - SABROG   Пользователи Qt, которые собирают свои приложения ...   28.6.2009, 13:52
- - Litkevich Yuriy   -O3 на самом деле не макисальная, а альтернативная...   28.6.2009, 14:28
|- - AD   0x - полная автоматизация. Ее ведь тоже можно испо...   28.6.2009, 15:04
- - Litkevich Yuriy   Цитата(AD @ 28.6.2009, 19:04) 0xтакого кл...   28.6.2009, 15:27
|- - AD   Цитата(Litkevich Yuriy @ 28.6.2009, 16:27...   28.6.2009, 16:19
- - trdm   Не такая уж и опечатка, у человека правильно мозг...   28.6.2009, 16:45
|- - AD   Цитата(trdm @ 28.6.2009, 17:45) Не такая ...   28.6.2009, 17:25
- - SABROG   __fastcall в стиле Qt. В Delphi и MSVC есть аттриб...   6.7.2009, 13:39
- - SergSh   QListView при инициализации считывает все строки д...   27.8.2009, 9:49
|- - SABROG   Цитата(SergSh @ 27.8.2009, 9:49) Чтобы эт...   23.2.2010, 19:39
- - SABROG   Кроссплатформенный метод установки приоритета для ...   23.2.2010, 16:36
- - Litkevich Yuriy   Ну собственно один вариант ещё и в списке рассылке...   23.2.2010, 19:22
- - SABROG   Выложу сегодня 2 полезных "хака", которы...   2.4.2010, 0:05
|- - Andrewshkovskii   Цитата(SABROG @ 2.4.2010, 1:05) Выложу се...   17.4.2010, 15:48
|- - xls   Цитатаnamespace Hack { template <class To, clas...   31.8.2010, 11:31
- - loz   Думаю что в данной теме необходимо упомянуть об ин...   11.4.2010, 8:56
- - SABROG   Цитата(Andrewshkovskii @ 17.4.2010, 16:48...   19.4.2010, 12:13
- - SABROG   Администратор одного программерского форума удалил...   24.4.2010, 11:55
- - Andrewshkovskii   Да, я тоже заметил, что удалили. Хотел инфу кое-ка...   24.4.2010, 12:11
- - igor_bogomolov   Цитата( SABROG)Администратор одного программерског...   24.4.2010, 12:11
- - SABROG   Администратор это объяснил так: ЦитатаВсе блоги, ...   24.4.2010, 15:44
- - SABROG   На заметку: Заполняем Qt контейнер без for: #incl...   26.5.2010, 17:27
- - Litkevich Yuriy   а зачем в struct testAttributePredicate оператор ...   26.5.2010, 19:17
|- - SABROG   Цитата(Litkevich Yuriy @ 26.5.2010, 20:17...   26.5.2010, 20:13
- - SABROG   Реализовал установку приоритета потока в параллель...   21.6.2010, 18:23
|- - kuzulis   SABROG, а с Троллями (нокией) пробовали это обсуди...   21.6.2010, 18:54
|- - SABROG   Цитата(kuzulis @ 21.6.2010, 19:54) SABROG...   22.6.2010, 11:19
- - SABROG   В старом проекте на Borland Builder C++ у меня был...   23.6.2010, 14:52
- - SABROG   Продолжил издеваться над кнопками и qss: qss QP...   25.6.2010, 11:57
- - Алексей1153   Обнаружил любопытный спецэффект: если в качестве п...   1.8.2010, 11:53
- - SABROG   Заметил интересную особенность при сериализации сп...   20.8.2010, 18:25
|- - aliks-os   Уважаемый Sabrog, вы показали как записывать в ini...   6.3.2011, 21:24
- - SABROG   Цитата(Гость_xls_* @ 31.8.2010, 12:31) К ...   1.9.2010, 8:21
|- - xls   Цитата(SABROG @ 1.9.2010, 8:21) Цитата(Го...   2.9.2010, 9:08
|- - SABROG   Цитата(xls @ 2.9.2010, 10:08) QTabWidgetP...   5.9.2010, 18:55
- - xls   Цитата(SABROG @ 5.9.2010, 18:55) Через in...   6.9.2010, 9:27
|- - SABROG   Цитата(xls @ 6.9.2010, 10:27) ИМХО, лучше...   7.9.2010, 8:43
|- - Гость_xls_*   Цитата(SABROG @ 7.9.2010, 8:43) Цитата(xl...   13.11.2010, 12:35
- - kwisp   Цитата(SABROG @ 7.9.2010, 8:43) Думаю это...   13.11.2010, 13:15
- - SABROG   Понадобилось отследить изменения в файле, который ...   18.1.2011, 20:11
- - igor_bogomolov   Если вы пишите плагины для QtDesigner и хотите что...   20.1.2011, 15:00
- - Алексей1153   Цитата(igor_bogomolov @ 20.1.2011, 17:00)...   22.1.2011, 22:05
- - SABROG   В Wiki, на Developer Network нашел интересный вари...   25.1.2011, 22:15
- - Litkevich Yuriy   Цитата(aliks-os @ 6.3.2011, 23:24) а...   6.3.2011, 21:30
- - Day   Цитата(Петров Виталий @ 18.9.2008, 8:31) ...   26.3.2012, 11:48
- - Litkevich Yuriy   Обсуждение вынес в отдельную тему: Работа с QSplit...   18.2.2013, 8:14
- - Litkevich Yuriy   Цитата(PUMA @ 30.4.2015, 3:30) А есть спо...   7.5.2015, 11:53


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 21:44