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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 1.8.2010, 11:53
Сообщение #2


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Обнаружил любопытный спецэффект: если в качестве подменю (QMenu) задать элементу другое предыдущее по иерархии меню, то при выборе пункта все предыдущие подменю изчезают с экрана и показывается указанное ))

К примеру:

----------------
m1
----------------
A1 > (m2)
A2
A3
----------------



отделено от темы "Создание вложенного действия QAction"

----------------
m2
----------------
A4
A5 > (m1)
A6
----------------

Выбор пунктов A1>A5 покажет на экране опять таки меню m1


---------------------------------------------------
Уточнил - не всё так радужно.


    #include <QMenu>

    QMap<QString,QAction*> map;
    const char* text=0;


    //менюшка первого уровня
    QMenu& m1=*new QMenu(this);
        text="11";        map[text]=m1.addAction(text);
        text="12";        map[text]=m1.addAction(text);
        text="13";        map[text]=m1.addAction(text);
        
    //менюшка второго уровня
    QMenu& m2=*new QMenu(this);
        text="21";        map[text]=m2.addAction(text);
        text="22";        map[text]=m2.addAction(text);
        text="23";        map[text]=m2.addAction(text);
        
    //менюшки третьего уровня
    QMenu& m3_1=*new QMenu(this);
        text="311";        map[text]=m3_1.addAction(text);
        text="312";        map[text]=m3_1.addAction(text);
        text="313";        map[text]=m3_1.addAction(text);
        text="314";        map[text]=m3_1.addAction(text);
    QMenu& m3_2=*new QMenu(this);
        text="321";        map[text]=m3_2.addAction(text);
        text="322";        map[text]=m3_2.addAction(text);
        text="323";        map[text]=m3_2.addAction(text);
    QMenu& m3_3=*new QMenu(this);
        text="331";        map[text]=m3_3.addAction(text);
        text="332";        map[text]=m3_3.addAction(text);
        text="333";        map[text]=m3_3.addAction(text);


    //связываем вложенные меню
    map["12"]->setMenu(&m2);

    map["21"]->setMenu(&m3_1);
    map["22"]->setMenu(&m3_2);
    map["23"]->setMenu(&m3_3);

    map["311"]->setMenu(&m1);
    map["311"]->setText("open m1");//откроется меню первого уровня
    
    map["312"]->setMenu(&m2);
    map["312"]->setText("open m2");//ничего не произойдёт
    
    map["313"]->setMenu(&m3_1);
    map["313"]->setText("open m3_1");//ничего не произойдёт, только подсветка прыгнет наверх
    
    map["314"]->setMenu(&m3_2);
    map["314"]->setText("open m3_2");//откроется ещё один уровень вложенности (стандартное поведение)

    //отображаем меню    
    m1.popup(cursor().pos());


1) если в в любом вложенном меню указать меню первого уровня в качестве вложенного далее, то выбор этого пункта закроет все подменю и покажет только меню первого уровня

2) если так же указать одно из промежуточных подменю, то ничего не произойдёт

3) если так же указать самого себя в качестве подменю, то просто переоткроется (визуально ничего не произойдёт, кроме того, что подсветка в текущеи открытом подменю прыгнет наверх)

4) если так же указать не учавствовавшее в цепочке подменю, оно просто откроется как вложенное

Сообщение отредактировал Алексей1153 - 1.8.2010, 18:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 22.11.2024, 23:26