2016-06-26 12 views
1

デフォルトでは、ツールバーのコンテキストメニューにはツールバーの名前が表示されます。追加のエントリでこのコンテキストメニューを拡張したいと思います。qtのツールバーコンテキストメニューにエントリを追加するには?

QTextEdit要素のコンテキストメニューを拡張した例が見つかりました。

http://www.qtcentre.org/threads/35166-extend-the-standard-context-menu-of-qtextedit

しかし、それはQTextEditクラスのcreateStandardContextMenuを使用しています。しかしQToolBarは、そのプロパティを持っていない表示されます。

http://doc.qt.io/qt-4.8/qtoolbar.html

編集

どうやら、デフォルトのコンテキストメニューには、QMainWindowから1です。

http://doc.qt.io/qt-4.8/qmainwindow.html#createPopupMenu

は残念ながら、私はそれにエントリを追加する方法をまだ見当もつかない。

編集

私はこのソースで働いています:

http://doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html

+1

ダウン投票私に私の質問を改善する方法についてのヒントを与えること自由に感じ... – Daniel

+0

を使用すると、現在のコンテキストメニューを取得しようとした持っていますただそれに追加するだけですか? – hyde

+1

@hydeありがとう。私は "現在のコンテキストメニューを取得する"部分に苦労していると思います。私はqtで血まみれの初心者です。あなたは私にヒントを与えることができますか? – Daniel

答えて

5

いいえメインウィンドウのQToolBarすべてに同じコンテキストメニューを提供する場合は、を上書きするだけでよいあなたのメインウィンドウで、次のように返されたメニューにカスタムアクションを追加する:

QMenu* MainWindow::createPopupMenu(){ 
    //call the overridden method to get the default menu containing checkable entries 
    //for the toolbars and dock widgets present in the main window 
    QMenu* menu= QMainWindow::createPopupMenu(); 
    //you can add whatever you want to the menu before returning it 
    menu->addSeparator(); 
    menu->addAction(tr("Custom Action"), this, SLOT(CustomActionSlot())); 
    return menu; 
} 
+0

ありがとうございます。しかし、クラス 'MainWindow'で宣言された 'error:no 'QMenu * MainWindow :: createPopupMenu()'メンバ関数があります。ミックスに他のものを追加する必要がありますか? – Daniel

+1

もちろん、ヘッダファイルに宣言を追加する必要があります。 IE、 'QMenu * createPopupMenu();'を 'MainWindow'クラスの' public'セクションの 'mainwindow.h 'に追加します。 。 。 – Mike

+0

@Mikeあなたのソリューションでは、MainWindowで管理されているすべてのコンテキストメニューに対してカスタムアクションが作成されますが、OPはツールバーでのみ必要です。少なくとも、タイトルと元のテキストには何の質問があるのですか。 – mvidelgauz

3

あなたはQToolBarから独自のクラスを派生し、その仮想関数contextMenuEventオーバーライドする必要があります:

qmytoolbarを。 h

#ifndef QMYTOOLBAR_H 
#define QMYTOOLBAR_H 

#include <QToolBar> 

class QMyToolBar : public QToolBar 
{ 
    Q_OBJECT 
public: 
    explicit QMyToolBar(QWidget *parent = 0) 
     : QToolBar(parent){} 

protected: 
    void contextMenuEvent(QContextMenuEvent *event); 
}; 

#endif // QMYTOOLBAR_H 

qmytoolbar.cppあなたQMainWindow' in your QMyToolBar and modify 'QMyToolBar::contextMenuEventへのポインタを保つ私のメインウィンドウを作成した標準のメニューを保持し、それにあなたの項目を追加したい場合は

#include "qmytoolbar.h" 

#include <QMenu> 
#include <QContextMenuEvent> 

void QMyToolBar::contextMenuEvent(QContextMenuEvent *event) 
{ 
    // QToolBar::contextMenuEvent(event); 

    QMenu *menu = new QMenu(this); 
    menu->addAction(tr("My Menu Item")); 
    menu->exec(event->globalPos()); 
    delete menu; 
} 

void QMyToolBar::contextMenuEvent(QContextMenuEvent *event) 
{ 
    // QToolBar::contextMenuEvent(event); 

    QMenu *menu = 
      //new QMenu(this); 
      m_pMainWindow->createPopupMenu(); 


    menu->addAction(tr("My Menu Item")); 
    menu->exec(event->globalPos()); 
    delete menu; 
} 
+0

ありがとうございます。しかし、私は 'エラー: 'm_pMainWindow'がこのスコープで宣言されていません。私のメインウィンドウは実際には「MainWindow」と呼ばれています。しかし、これを置き換えることも役に立たなかった。私は私の質問に私が働いているソースを追加しました。 – Daniel

+1

@ダニエルもちろん、そのメンバーをあなたの 'QMyToolBar'に追加して、それを適切に初期化する必要があります。 – mvidelgauz

+0

はい、もちろんです。元の質問やメインウィンドウのどこでも聞いているように、ツールバーにのみ追加のメニュー項目が必要ですか? – mvidelgauz

関連する問題