Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: gil9red от Декабрь 13, 2013, 19:52



Название: Как установить иконки действий для QTextEdit?
Отправлено: gil9red от Декабрь 13, 2013, 19:52
В теме под "действиями" имеются ввиду qactions, которые видны при вызове контекстного меню :)


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: kambala от Декабрь 13, 2013, 20:31
наверное только если свое меню делать, вряд ли можно получить доступ к стандартному. наследуешься и переопределяешь createStandardContextMenu().


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: gil9red от Декабрь 13, 2013, 21:11
Посмотрел исходники и нашел класс, который и создает менюшку QTextEdit: тык! (http://code.woboq.org/qt5/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp.html#_ZN18QWidgetTextControl25createStandardContextMenuERK7QPointFP7QWidget)

Вот если бы можно было поместить свои иконки в "тема" (theme) и назвать их как их аналоги (edit-*) :)


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: Old от Декабрь 13, 2013, 21:30
Вот если бы можно было поместить свои иконки в "тема" (theme) и назвать их как их аналоги (edit-*) :)
Попробуйте:
void QIcon::setThemeSearchPaths ( const QStringList & paths ) [static]


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: gil9red от Декабрь 13, 2013, 21:39
У меня винда, так что не получится :)


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: kambala от Декабрь 13, 2013, 22:58
а если как-то так?
Код
C++ (Qt)
QMenu *MyTextEdit::createStandardContextMenu()
{
   QMenu *menu = QTextEdit::createStandardContextMenu();
   // пробегаешься по экшенам и выставляешь им иконки
   return menu;
}


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: gil9red от Декабрь 13, 2013, 23:58
То, что нужно!
Только можно и другой метод переопределить :)

С определением экшенов проблемка - text() возвращает полное имя, например, "Вырезать      Ctrl+X"
Пытался вернуть тему иконок у экшена, предполагая, что может вернется "edit-cut" - не получилось
Попробовал смотреть комбинации (shortcut) и по комбинациям определять какую иконку подсовывать - комбинации пустые возвращаются
Можно так попробовать, но это хардкор :)
Код
C++ (Qt)
   void MyTextEdit::contextMenuEvent( QContextMenuEvent * event )
   {
       QMenu * menu = createStandardContextMenu();
 
       QList < QAction * > actions = menu->actions();
       actions[0]->setIcon( QIcon( ":/undo" ) );
 
       menu->exec( event->globalPos() );
       menu->deleteLater();
   }


Название: Re: Как установить иконки действий для QTextEdit?
Отправлено: kambala от Декабрь 14, 2013, 00:20
я думаю лучше все-таки переопределять именно createStandardContextMenu() (или его перегрузку с параметром), а обработку события контекстного меню оставить дефолтной