crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> как добавить свои пункты в существующее контекстное меню меню?, (начинающий)
dimamix
  опции профиля:
сообщение 14.4.2011, 16:13
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 8.4.2011
Пользователь №: 2582

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




Репутация:   0  


Добрый день.
Продолжаю писать плагин на питоне для Qgis.
В качестве gui используется QT.
Отображением дерева проекта заведует объект QTreeWidget.
QTreeWidgetItem - являются некие объекты "GROUP" и "LAYER".
Сделал свое меню

 self.actionLoadCategory = QAction(QIcon(":/plugins/testplugingl_mix/mix32.png"), u"Загрузка слоёв", None)
QObject.connect(self.actionLoadCategory, SIGNAL("triggered()"), self.loadDataCategory)
self.iface.addPluginToMenu("&Test plugin", self.actionLoadCategory)


У объектов "GROUP" и "LAYER" уже есть контекстные меню.

конкретный вопрос:
Можно ли (и если можно, то как ) добавить свои пункты в существующее контекстное меню меню?

зы
на С читаю, со словарем :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
novichkov
  опции профиля:
сообщение 16.4.2011, 15:55
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


Надо перехватить создание события "вызов контекстного меню", явно создать контекстное меню, а затем добавить в него нужные пункты.
Я делал это для QLineEdit:

class LineEdit : public QLineEdit
{
    Q_OBJECT
public:
    LineEdit(QWidget *parent = 0);
protected:
    void contextMenuEvent(QContextMenuEvent *);
private slots:
    void actionTriggered();
private:
    QList<QAction *> acts;
// это только для динамического перевода, можно и не запоминать
};


LineEdit::LineEdit(QWidget *parent)
    : QLineEdit(parent),
{
    //создаем свои действия и заосим их в список
        QAction *a=new QAction(tr("..."),this);
        connect(a,SIGNAL(triggered()),SLOT(actionTriggered()));
        acts << a;

//и так далее
    }
}

void LineEdit::actionTriggered()
{
    QAction *a = qobject_cast<QAction *>(sender());
    if (!a) return;
    //дальше нужные действия
}

void LineEdit::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = createStandardContextMenu();
    menu->insertSeparator(menu->actions().at(0));
//если надо добавить действия в отдельное выпадающее меню
    QMenu *setAsMenu = new QMenu(tr("Set into..."),menu);
    setAsMenu->addActions(acts);
    menu->insertMenu(menu->actions().at(0),setAsMenu);
//или прямо:  menu->addActions(acts);

    menu->exec(event->globalPos());
    delete menu;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 24.12.2025, 5:02