s
March 15, 2018, 2:18 a.m.

Контекстное меню..

#Qt

Evileg после этого https://evileg.com/forum/topic/473/ решил добавить к своему проекту, выбор действия по контекстному меню, удаление работает, а редактировать не получается. Скрин ниже :( Можешь помочь пожалуйста, как тут сделать?

photo_2018-03-14_23-11-35.jpg
3
The question is asked by the articleQt/C++ - Lesson 013. QMenu – How to work with context menu in QTableView?

Do you like it? Share on social networks!

7
BlinCT
  • March 15, 2018, 2:30 a.m.

Добрый вечер.
Почитайте пожалуйста вот эту тему https://evileg.com/post/87/
У сигнала и слота должна быть схожая сигнатура. В вашем же случаи сигнал ничего не посылает а слот принимает индекс. То есть их сигнатура очень различна.
А по статье там слот ничего не принимает.

    s
    • March 15, 2018, 2:46 a.m.

    Я понимаю что должна быть похожая сигнатура, просто не могу придумать как в контекстную менюшку отправить индекс, щас это выглядит так ->

      BlinCT
      • March 15, 2018, 2:54 a.m.
      • (edited)

      Не кидайте пожалуйста скриншоты. Хотите показать код просто вставкой сделайте.

        Evgenii Legotckoi
        • March 15, 2018, 2:56 a.m.

        Добрый день!

        Не надо кидать скриншоты программного кода. В редакторе комментариев есть диалог вставки программного кода. Пользуйтесь им, пожалуйста.
        Если кто-то захочет вам помочь, то будет вынужден перепечатывать вручную весь код, если ему потребуется повторить его работу у себя.
        Ни на одном форуме не приветствуется вставка программного кода в виде скриншотов.
          s
          • March 15, 2018, 3:05 a.m.
              connect(ui->deviceTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slotEditRecord(QModelIndex)));
              // Коннект к слоту вызова контекстного меню
              connect(ui->deviceTableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotCustomMenuRequested(QPoint)));
          }
          
          
          void MainWindow::slotCustomMenuRequested(QPoint pos) // Контекстное меню
          {
            
              QMenu *menu = new QMenu(this);
          
              QAction *editDevice = new QAction(trUtf8("Редактировать"), this);
              QAction *deleteDevice = new QAction(trUtf8("Удалить"), this);
              
          
              connect(editDevice, SIGNAL(triggered()), this, SLOT(slotEditRecord(QModelIndex)));
          
              connect(deleteDevice, SIGNAL(triggered()), this, SLOT(slotRemoveRecord()));
          
          
              menu->addAction(editDevice);
              menu->addAction(deleteDevice);
          
              menu->popup(ui->deviceTableView->viewport()->mapToGlobal(pos)); 
          } Такс, вот
            Evgenii Legotckoi
            • March 15, 2018, 3:31 a.m.
            • The answer was marked as a solution.

            Создайте ещё один слот специально для контекстного меню, назовём его например onEditDeviceAction() , чтобы не было аргумента с индексом.

            А выглядеть он будет так.
            void MainWindow::onEditDeviceAction()
            {
                slotEditRecord(ui->deviceTableView->selectionModel()->currentIndex());
            }
            И вот этот слот уже подключайте к сигналу.
            connect(editDevice, SIGNAL(triggered()), this, SLOT(onEditDeviceAction()));
            По сути это будет такая обёртка, которая предоставит нужный индекс в ваш метод для редактирования записи.

            Не забудьте объявить слот void onEditDeviceAction() в заголовочном файле класса MainWindow
              s
              • March 16, 2018, 11:15 a.m.

              Спасибо :)

                Comments

                Only authorized users can post comments.
                Please, Log in or Sign up
                • Last comments
                • Evgenii Legotckoi
                  April 16, 2025, 5:08 p.m.
                  Благодарю за отзыв. И вам желаю всяческих успехов!
                • IscanderChe
                  April 12, 2025, 5:12 p.m.
                  Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                • AK
                  April 1, 2025, 11:41 a.m.
                  Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                • Evgenii Legotckoi
                  March 9, 2025, 9:02 p.m.
                  К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                • VP
                  March 9, 2025, 4:14 p.m.
                  Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…