Секреты и интересные возможности Qt |
Здравствуйте, гость ( Вход | Регистрация )
Секреты и интересные возможности Qt |
void* |
23.7.2008, 22:28
Сообщение
#1
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
Предлагаю в данную тему скидывать все известные вам интересные фичи и "секреты" Qt. Думаю, так можно собрать неплохую коллекцию интересных возможностей Qt, где каждый сможет найти что-нибудь интересное для себя или узнать новое. Начну сам:
1) Макрос Q_UNUSED позволяет избежать предупреждений по поводу неиспользования какой-то переменной. Пример:
2) Функция QString Qt::escape(const QString &plain) позволяет конвертировать в строке, задаваемую параметром plain метасимволы HTML (<, >, &) в их HTML-эквиваленты. Пример:
3) Макрос Q_PROPERTY позволяет в некоторых случаях избежать приведения. Пример:
to be continued... P.S. Надеюсь тема не умрет, и каждый будет ее поддерживать своими находками ----------------------- Ссылки на интересные возможности: 1) QComboBox-Изменение размера выпадающего списка 2) qmake, как обратится к текущему каталогу? Сообщение отредактировал Litkevich Yuriy - 31.1.2009, 12:52 |
|
|
AD |
24.7.2008, 9:29
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
P.S. Мне кажется тему можно вверху прикрепить!
Не знаю, возможно, это и известный факт, но мне показалось не совсем обычным такое применение функции read/write. При этом применении она становится аналогом функций Windows Api ::ReadFile/::WriteFile:
В данном коде, тип _str - это пользовательский тип. В функциях read/write считываются в эту структуру данные указанного типа при преобразовании в const char*, а не в void*! |
|
|
Litkevich Yuriy |
24.7.2008, 9:36
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
void*, для 1-го пункта часто имя переменной коментируют, чтоб компиллер не ругался:
|
|
|
void* |
24.7.2008, 10:09
Сообщение
#4
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
LitkevichВ Yuriy, приколупался лучше бы продолжил идею
|
|
|
Tonal |
24.7.2008, 10:16
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Не знаю, возможно, это и известный факт, но мне показалось не совсем обычным такое применение функции read/write. При этом применении она становится аналогом функций Windows Api ::ReadFile/::WriteFile: Оно вполне обычное - сохранение буфера. Но мне кажется, код у тебя не правильный. Если сохранение/восстановление происходят в разных программах, или даже при разных запусках одной программы, в поле strOut.s с большой вероятностью будет мусор. Сообщение отредактировал Tonal - 24.7.2008, 10:17 |
|
|
AD |
24.7.2008, 10:33
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Оно вполне обычное - сохранение буфера. Но мне кажется, код у тебя не правильный. Если сохранение/восстановление происходят в разных программах, или даже при разных запусках одной программы, в поле strOut.s с большой вероятностью будет мусор. не совсем понял почему неправильный. Но он исправно работает. Проверял на нескольких машинах! |
|
|
ЙаМайскЫйПчОЛ |
24.7.2008, 11:12
Сообщение
#7
|
Участник Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: 5 |
Не знаю, возможно, это и известный факт, но мне показалось не совсем обычным такое применение функции read/write. При этом применении она становится аналогом функций Windows Api ::ReadFile/::WriteFile: Это обычно для программирования под *nix'ы read/write можно применить для любого дескриптора, в т.ч. для дескриптора файла, а файл в *nix'ах это всё что есть и может быть в системе. ))) |
|
|
Tonal |
24.7.2008, 11:48
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
...в поле strOut.s с большой вероятностью будет мусор. не совсем понял почему неправильный. Но он исправно работает. Проверял на нескольких машинах! 1) Как объявлено поле _str.s? Как char* ? 2) На что указывает поле strIn.s перед сохранением (где живёт массив символов)? 3) Как ты думаешь, что именно сохраняется в файле на месте соответствующем полю _str.s? 4) Что будет находится в поле strOut.s после чтения? 5) Куда будет указывать поле strOut.s в другой программе? Или в этой же, если выполнится например вот такой код:
P.S. В своём первом посте, ты strOut и strIn местами не перепутал? P.P.S Если я ошибся в первом предположении, и поле _str.s имеет тип строки (QString, или std::string, или ещё какой), задумайся, как он устроен, и где хранятся те символы, которые представляют строку. Сообщение отредактировал Tonal - 24.7.2008, 11:50 |
|
|
void* |
25.7.2008, 23:26
Сообщение
#9
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
Собственно продолжение. Простенький пример того, что можно сделать с помощью Qt Style Sheets. Скомпилируйте это у себя и зацените кнопочку:
думаю вам понравится Сообщение отредактировал void* - 25.7.2008, 23:27 |
|
|
Петров Виталий |
18.9.2008, 8:31
Сообщение
#10
|
Студент Группа: Участник Сообщений: 29 Регистрация: 8.1.2008 Пользователь №: 63 Спасибо сказали: 2 раз(а) Репутация: 0 |
Тоже поделюсь парой интересных моментов.
1) Если вы не используете потоки. но при этом имеется к примеру большой цикл, то интерфейс приложения может блокироваться и не перерисовывается. Чтобы решить эту проблему можно вызывать метод QApplication::processEvents(); при каждой итерации цикла. 2) Сделать фон любого виджета прозрачным можно так: listwidget->setFrameShape(QFrame::NoFrame); listwidget->viewport()->setAutoFillBackground(false); это может пригодится например, если вы пишете плазмоид для kde4 а в плазме пока нет некоторых нативных прозрачных виджетов =))) |
|
|
Текстовая версия | Сейчас: 29.11.2024, 11:04 |