crossplatform.ru

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


  Ответ в контекстное меню на элемент QListWidget
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
asket Дата 21.8.2014, 14:08
  ответ на вопрос нашел. можно закрывать!
Надо было не кнопку создавать, а объект QAction, затем добавить этот элемент в toolBar, а там уже можно извращаться с кнопкой как угодно душе.
asket Дата 21.8.2014, 13:22
  У меня вопрос как раз по контекстному меню на 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);
}


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

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

В качестве живого примера рекомендую изучить демку %QTDIR%/demos/sqlbrowser
Тебе нужно изучить ConnectionWidget, он содержит QTreeWidget, являющися родственным для QListWidget
Kostya Дата 19.8.2014, 5:42
  Здравствуйте! Не давно начал изучать Qt и не как не могу понять как установить КМ на элементы QListWidget, если можно дайте пример.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 20.4.2024, 5:50