crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> контекстное меню на элемент QListWidget
Гость_Kostya_*
сообщение 19.8.2014, 5:42
Сообщение #1





Гости








    


Здравствуйте! Не давно начал изучать Qt и не как не могу понять как установить КМ на элементы QListWidget, если можно дайте пример.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.8.2014, 11:04
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Краткая экскурсия:
В Qt, меню и панели инструментов строятся на основе НЕвизуальных классов - QAction, которые описывают действие (например, "Копировать").
Затем действия связываются с неким визуальным объектом, например, QMenu.

Для произвольного виджета, можно установить контекстное меню следующим образом:
1) Создать нужные действия
2) Связать эти действия с виджетом, с помощью его метода void QWidget::insertAction ( QAction * before, QAction * action )
3) Задать политику контекстного меню виджета равную Qt::ActionsContextMenu, чтобы контекстное меню отображало все связанные с виджетом действия.

В качестве живого примера рекомендую изучить демку %QTDIR%/demos/sqlbrowser
Тебе нужно изучить ConnectionWidget, он содержит QTreeWidget, являющися родственным для QListWidget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
asket
  опции профиля:
сообщение 21.8.2014, 13:22
Сообщение #3


Студент
*

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

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




Репутация:   0  


У меня вопрос как раз по контекстному меню на QTreeWidget.
В главном окне MainWindow в доке mainToolBar создал кнопку QToolButton, которая проваливается внутрь и держится в таком состоянии до повторного нажатия, в качестве CentralWidget я создал объект собственного класса производного от QTreeWidget, в нем контекстное меню, но почему же при выборе пункта в контекстном меню treeWidget вышеупомянутая кнопка возвращается в исходное состояние (отскакивает)?

Фрагмент кодов:

вставка кнопки QToolButton в mainToolBar
void MainWindow::createToolButtons()
{

    QToolButton *tb = new QToolButton(ui->mainToolBar);
    tb->setPopupMode(QToolButton::InstantPopup);

    m_connectAct = ui->mainToolBar->addWidget(tb);
    m_connectAct->setShortcuts(QKeySequence::New);
    m_connectAct->setStatusTip(tr("Connect"));

}


Этот код создает и вызывает контекстное меню

void MyTreeWidget::on_customContextMenuRequested(const QPoint &pos)
{
    QTreeWidgetItem* item = ui->treeWidget->itemAt(pos);
    QMenu* menu = new QMenu;
    if (item == NULL){

        menu->addAction(tr("Обновить"), this, SLOT(updateFilesListRequest()));
        menu->addAction(tr("Добавить"), this, SLOT(addFiles()));
    }else
    {
        menu->addAction(tr("Сохранить как.."), this, SLOT(saveAsFile()));
        menu->addAction(tr("Удалить"), this, SLOT(deleteFiles()));
        menu->addAction(tr("Переименовать"), this, SLOT(renameFile()));
    }

    QPoint p = ui->treeWidget->/* viewport()-> */mapToGlobal(pos); // ?
    QAction* action = menu->exec(p);
}


буду благодарен за любую помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
asket
  опции профиля:
сообщение 21.8.2014, 14:08
Сообщение #4


Студент
*

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

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




Репутация:   0  


ответ на вопрос нашел. можно закрывать!
Надо было не кнопку создавать, а объект QAction, затем добавить этот элемент в toolBar, а там уже можно извращаться с кнопкой как угодно душе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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