<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Как создать контекстное меню? - Qt				            </title>
            <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/</link>
            <description>Обсуждение вопросов, посвященных программированию микроконтроллеров, разработке электроники и не только.</description>
            <language>ru-RU</language>
            <lastBuildDate>Tue, 15 Sep 2026 09:10:47 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-941</link>
                        <pubDate>Tue, 05 Apr 2022 19:17:09 +0000</pubDate>
                        <description><![CDATA[@aveal А вот это отличное решение]]></description>
                        <content:encoded><![CDATA[<p>@aveal А вот это отличное решение </p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Родион</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-941</guid>
                    </item>
				                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-940</link>
                        <pubDate>Mon, 04 Apr 2022 05:51:59 +0000</pubDate>
                        <description><![CDATA[@rodion-2 Либо все настройки упаковать в структуру, например, и пробрасывать одним слотом, либо через get().]]></description>
                        <content:encoded><![CDATA[<p>@rodion-2 Либо все настройки упаковать в структуру, например, и пробрасывать одним слотом, либо через get().</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-940</guid>
                    </item>
				                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-939</link>
                        <pubDate>Sun, 03 Apr 2022 18:10:43 +0000</pubDate>
                        <description><![CDATA[Еще есть идея сделать под каждую настройку сигнал в классе ContextMenu, а уже в главном файле под каждый сигнал сделать соответствующий слот.]]></description>
                        <content:encoded><![CDATA[<p>Еще есть идея сделать под каждую настройку сигнал в классе <em>ContextMenu, </em>а уже в главном файле под каждый сигнал сделать соответствующий слот.</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Родион</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-939</guid>
                    </item>
				                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-938</link>
                        <pubDate>Sun, 03 Apr 2022 15:44:56 +0000</pubDate>
                        <description><![CDATA[@aveal Проект я добавил, если еще нужно. А на счет кода, то я сделал класс, в конструкторе которого все это создаю и в него же добавил строку для закрепления меню к позиции курсора (показана...]]></description>
                        <content:encoded><![CDATA[<p>@aveal Проект я добавил, если еще нужно. А на счет кода, то я сделал класс, в конструкторе которого все это создаю и в него же добавил строку для закрепления меню к позиции курсора (показана ниже). Но мне непонятна суть создания контекстного меню через строку <em>setContextMenuPolicy(Qt::CustomContextMenu), </em>потому что я просто все сделал в конструкторе класса.</p>
<pre contenteditable="false">menu-&gt;popup(QCursor::pos());</pre>
<p>Еще появился вопрос по поводу того, как из конструктора контекстного меню брать результат работы тех или иных функций. Например, я хочу сделать на правую кнопку мыши вызов меню, в котором будут всякие разные поля по работе с графиком такие, как cut, properties, zoom, а чтобы не нагружать <em>mainwindow.cpp </em>я хочу всю логику, которая связана с настройкой графика, прописать в отдельном классе (ContextMenu), но как мне потом вставлять тот же измененный цвет графика в обработку правой кнопки мыши уже в сам <em>mainwindow.cpp</em> я не знаю. </p>
206
207
208
209
<p>Чтобы лучше было понятно о чем я говорю, добавил картинки. На них есть контекстное меню с полем <em>properties, </em>которое вызывает новую форму, а она все настройки после нажатия <em>OK</em> передает графику. </p>
<p>Может у кого-то есть исходники с простенькой программкой, в которой создается что-то похожее и при этом не запихивается все в один файл <em>mainwindow</em>? Потому что у меня идея только создать кучу переменных, а потом через какие-нибудь сетторы все это брать.</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Родион</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-938</guid>
                    </item>
				                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-937</link>
                        <pubDate>Sun, 03 Apr 2022 08:33:09 +0000</pubDate>
                        <description><![CDATA[А вообще вот я накидал простенький пример:

MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H



#include 



QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_...]]></description>
                        <content:encoded><![CDATA[<p>А вообще вот я накидал простенький пример:</p>
204
<p>MainWindow.h</p>
<pre contenteditable="false">#ifndef MAINWINDOW_H
#define MAINWINDOW_H



#include 



QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE



class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void customContextMenuRequestedSlot();

private:
    Ui::MainWindow *ui;
};



#endif // MAINWINDOW_H
</pre>
<p>MainWindow.cpp</p>
<pre contenteditable="false">#include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui-&gt;setupUi(this);

    this-&gt;setContextMenuPolicy(Qt::CustomContextMenu);
    connect(this, &amp;MainWindow::customContextMenuRequested, this, &amp;MainWindow::customContextMenuRequestedSlot);
}



MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::customContextMenuRequestedSlot()
{
    QMenu* menu = new QMenu(this);

    QAction* closeAction = new QAction(("Close"), this);
    connect(closeAction, &amp;QAction::triggered, this, &amp;MainWindow::close);

    menu-&gt;addAction(closeAction);
    menu-&gt;popup(QCursor::pos());
}
</pre>
<p> </p>
<p> </p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-937</guid>
                    </item>
				                    <item>
                        <title>НА: Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-936</link>
                        <pubDate>Sun, 03 Apr 2022 08:20:44 +0000</pubDate>
                        <description><![CDATA[Привет! Можешь скинуть проект целиком?]]></description>
                        <content:encoded><![CDATA[<p>Привет! Можешь скинуть проект целиком?</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-936</guid>
                    </item>
				                    <item>
                        <title>Как создать контекстное меню?</title>
                        <link>https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-935</link>
                        <pubDate>Sat, 02 Apr 2022 20:02:49 +0000</pubDate>
                        <description><![CDATA[Здравствуйте! Пытаюсь создать контекстное меню, которое будет вызываться при нажатии правой кнопки мыши. Проблема в том, что я создал класс, в котором собираюсь реализовать весь список конте...]]></description>
                        <content:encoded><![CDATA[<p>Здравствуйте! Пытаюсь создать контекстное меню, которое будет вызываться при нажатии правой кнопки мыши. Проблема в том, что я создал класс, в котором собираюсь реализовать весь список контекстного меню, но теперь у меня не получается добавить его объект в основную программу, где я обрабатываю нажатие кнопок мыши. Подскажите, что я делаю неправильно?</p>
<p>Создаю класс для меню. </p>
<p>h - файл</p>
<pre contenteditable="false">#include &lt;QWidget&gt;
#include &lt;QMenu&gt;
#include &lt;QDebug&gt;
#include &lt;QInputEvent&gt;

class ContextMenu : public QWidget
{
    Q_OBJECT

public:
    ContextMenu(QWidget* parent = 0);
    ~ContextMenu()
    {
//        delete menu;
//        delete widget;
        qDebug() &lt;&lt; "Destructor of ContextMenu class";
    }

protected:
    void contextMenuEvent(QContextMenuEvent* event) override;

private slots:
    void slotPropertiesGraph();
    void slotItem1();
    void slotItem2();
    void slotItem3();

private:
    QMenu *menu;
    QWidget *widget;
    QAction *propGrahp;
    QAction *item1;
    QAction *item2;
    QAction *item3;
};</pre>
<p>cpp - файл</p>
<pre contenteditable="false">#include "contextmenu.h"

ContextMenu::ContextMenu(QWidget* parent) : QWidget(parent)
{
//    widget = new QWidget;
//    widget-&gt;setContextMenuPolicy(Qt::CustomContextMenu);

//    parent-&gt;setContextMenuPolicy(Qt::CustomContextMenu);

    menu = new QMenu(this);
    propGrahp = new QAction("Prorerties", this);
    item1     = new QAction("Item1", this);
    item2     = new QAction("Item2", this);
    item3     = new QAction("Item3", this);

    menu-&gt;addAction(propGrahp);
    menu-&gt;addAction(item1);
    menu-&gt;addAction(item2);
    menu-&gt;addAction(item3);

    connect(propGrahp, &amp;QAction::triggered, this, &amp;ContextMenu::slotPropertiesGraph);
    connect(item1,     &amp;QAction::triggered, this, &amp;ContextMenu::slotItem1);
    connect(item2,     &amp;QAction::triggered, this, &amp;ContextMenu::slotItem2);
    connect(item3,     &amp;QAction::triggered, this, &amp;ContextMenu::slotItem3);

    qDebug() &lt;&lt; "Construtor of ContextMenu class";
}

void ContextMenu::contextMenuEvent(QContextMenuEvent* event)
{
    menu-&gt;exec(event-&gt;globalPos());
    qDebug() &lt;&lt; "contextMenuEvent";

//    connect(widget, &amp;QWidget::customContextMenuRequested, this, &amp;ContextMenu::slotCustomMenuRequested);

}
void ContextMenu::contextMenuEvent(QContextMenuEvent* event)
{
    menu-&gt;exec(event-&gt;globalPos());
    qDebug() &lt;&lt; "contextMenuEvent";

//    connect(widget, &amp;QWidget::customContextMenuRequested, this, &amp;ContextMenu::slotCustomMenuRequested);

}

void ContextMenu::slotPropertiesGraph()
{
    qDebug() &lt;&lt; "properties graph!!!";
}

void ContextMenu::slotItem1()
{
    qDebug() &lt;&lt; "Item1";
}

void ContextMenu::slotItem2()
{
    qDebug() &lt;&lt; "Item2";
}

void ContextMenu::slotItem3()
{
    qDebug() &lt;&lt; "Item3";
}</pre>
<p>Функция, в которой я обрабатываю нажатие кнопок мыши. При нажатии на правую кнопку мыши должно вызываться созданное меню в точке, где находится курсор мыши.</p>
<pre contenteditable="false">void MainWindow::mousePress(QMouseEvent *event)
{
    if (event-&gt;button() == Qt::LeftButton)
    {
        posCursor = event-&gt;pos();
        QWidget *widFocus = QApplication::focusWidget();

        for (QCustomPlot *w : widgetList)
        {
            if (widFocus-&gt;objectName() == w-&gt;objectName())
            {
                sctRect = new SelectedRect(QRubberBand::Rectangle, w);
                sctRect-&gt;setGeometry(QRect(posCursor, QSize()));
                sctRect-&gt;show();

                qDebug() &lt;&lt; "press";
                qDebug() &lt;&lt; "pos: " &lt;&lt; event-&gt;localPos();
            }
        }
    }
    else if (event-&gt;button() == Qt::RightButton)
    {
//        ui-&gt;osc-&gt;setContextMenuPolicy(Qt::ActionsContextMenu);
//        ui-&gt;spectrum-&gt;setContextMenuPolicy(Qt::ActionsContextMenu);
        cMenu = new ContextMenu(ui-&gt;osc);
        cMenu-&gt;setVisible(true);

        qDebug() &lt;&lt; "RightButton";
    }
}</pre>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/qt/">Qt</category>                        <dc:creator>Родион</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/qt/kak-sozdat-kontekstnoe-menyu/#post-935</guid>
                    </item>
							        </channel>
        </rss>
		