Russian Qt Forum
Июля 01, 2025, 06:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Можно ли встроить PushButton в QMenu/QAction?  (Прочитано 27182 раз)
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.021 секунд. Запросов: 20.