Russian Qt Forum
Ноябрь 25, 2024, 04:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Можно ли встроить PushButton в QMenu/QAction?  (Прочитано 26038 раз)
liri2006
Гость
« : Январь 04, 2012, 22:46 »

Сопсно сабж, нужно чтоб выглядело примерно так:
Записан
Kolobok
Гость
« Ответ #1 : Январь 05, 2012, 00:15 »

QWidgetAction
Записан
liri2006
Гость
« Ответ #2 : Январь 05, 2012, 23:52 »

Поиграл с QWidgetAction, но получилось только нечто такое:

Вобще были надежды впихнуть кнопку в середину QMenu, но даже если и забить на те амбиции то в текущей реализации слегка напрягает рамка вокруг меню и место под иконку.
Вот код реализации:
Код:
class SpinBoxAction : public QWidgetAction {
public:
    SpinBoxAction (const QString & title) :
      QWidgetAction (NULL) {
        QWidget* pWidget = new QWidget (NULL);
        QHBoxLayout* pLayout = new QHBoxLayout();

        pLabel = new QLabel(title);
        pPushButton = new QPushButton("+");
        pMenu = new QMenu();
        pMenu->addMenu("");

        pLayout->addWidget(pLabel);
        pLayout->addWidget(pPushButton);
        pLayout->addWidget(pMenu);

        pWidget->setLayout(pLayout);

        setDefaultWidget(pWidget);
    }

    }

private:
    QMenu *pMenu;
    QPushButton *pPushButton;
    QLabel *pLabel;
};
Вызов:
Код:
SpinBoxAction * spinBoxAction = new SpinBoxAction(tr("Action Title"));
    ui->menuOlolo->addAction(spinBoxAction);
Записан
andrew.k
Гость
« Ответ #3 : Январь 06, 2012, 01:57 »

А что должен делать этот плюс? Мне как пользователю не понятно.
Записан
liri2006
Гость
« Ответ #4 : Январь 06, 2012, 02:53 »

Ну например добавлять еще одит QAction в текущий QMenu, выводить дополнительные опции для текущего элемента и тд.
Записан
iroln
Гость
« Ответ #5 : Январь 06, 2012, 10:42 »

Хотите сделать нечто подобное?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Январь 06, 2012, 11:42 »

добавлять еще одит QAction в текущий QMenu
Юзер вообще не должен заниматься настройкой содержимого меню; максимум - хоткеями.

выводить дополнительные опции для текущего элемента и тд.
Для этого придумали подменю

И да, ваша задача технически нереализуема на маке. И, думаю, на линуксе с их новомодными юнити.
Записан
liri2006
Гость
« Ответ #7 : Январь 06, 2012, 11:49 »

Хотите сделать нечто подобное?

Да, только у менюшек с кнопками должны быть еще и подменю.
Юзер вообще не должен заниматься настройкой содержимого меню; максимум - хоткеями.

Почему? А если представить что это меню представляет небольшое древо каталогов?
Записан
iroln
Гость
« Ответ #8 : Январь 06, 2012, 11:55 »

Сомневаюсь, что это хорошая идея с точки зрения usability - так наворачивать меню. Меню вообще штука удобная только если оно одноуровневое. Если появляются подменю, пользоваться им становится неудобно. А если ещё добавить туда решения в виде кнопок, расширяющих функциональность этого же меню, изменяющих это меню, то вообще не представляю как этим можно будет пользоваться.
Записан
liri2006
Гость
« Ответ #9 : Январь 06, 2012, 12:11 »

Скорей всего вы правы, придется реализовывать свою задачу по другому, но все же, для полноты картины, хотелось бы узнать как впихнуть хотя бы кнопки так, чтоб смотрелось нормально.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Январь 06, 2012, 12:33 »

Есть такой приемчик:

- если пользователь "просто" кликает меню - появляются "обычные" айтемы
- если напр держит Option (Alt) и кликает - то некоторые айтемы заменены

Это просто в реализации, помогает избежать "раздувания" меню и довольно удобно для юзверя
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Январь 06, 2012, 13:35 »

Есть такой приемчик:

- если пользователь "просто" кликает меню - появляются "обычные" айтемы
- если напр держит Option (Alt) и кликает - то некоторые айтемы заменены

Это просто в реализации, помогает избежать "раздувания" меню и довольно удобно для юзверя
И рекомендуется эпплом не использовать это.
Записан
BRE
Гость
« Ответ #12 : Январь 06, 2012, 13:48 »

И рекомендуется эпплом не использовать это.
потому что 99,9% пользователей не додумаются, что такое может быть. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Январь 06, 2012, 14:25 »

И рекомендуется эпплом не использовать это.
Прошу показать рекомендацию (просто интересно). Хотя впрочем зачем автору следовать собственным рекомендациям? Улыбающийся У того же apple я почему-то не вижу в меню Finder айтема "screen shot" - да, надо запомнить Command-Shift-4  и др. Это минус, но компенсируется удобством. Да что там скриншот - просто откройте меню File и понажимайте Ctl и/или Alt  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #14 : Январь 06, 2012, 14:31 »

И рекомендуется эпплом не использовать это.
Прошу показать рекомендацию (просто интересно). Хотя впрочем зачем автору следовать собственным рекомендациям? Улыбающийся У того же apple я почему-то не вижу в меню Finder айтема "screen shot" - да, надо запомнить Command-Shift-4  и др. Это минус, но компенсируется удобством. Да что там скриншот - просто откройте меню File и понажимайте Ctl и/или Alt  Улыбающийся

Цитировать
Although you can enable dynamic menu items in a contextual or Dock menu, you should probably consider such items to be doubly hard for users to discover. As with app menus, make sure that the functionality of the contextual or Dock menu does not depend on the discovery of dynamic menu items.
Это про док, но тк я не следую тупо гайдлайнам, то, я считаю, разумно обобщить эти динамик меню айтемы на айтемы в  любых меню. Их сложно обнаружить (надо пройтись по всем менюхам с альтом), посему в большинстве случаев их лучше вообще не реализовывать (правило 80/20)
Записан
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 23.