2013-08-28 22 views
0

我已經實現了一個對話框,裏面有兩個自定義的文本編輯器(兩個編輯器對象具有相同的類) 此自定義窗口小部件是QWidget的繼承類,它有兩個窗口部件,一個是動作工具欄和第二個是QTextEdit。我爲這個自定義小部件設置了一些快捷方式,用於「使文本變粗」,「使文本變成斜體」等等。Qt:不明確的快捷方式問題

這裏是我的對話框裏面,這些小部件的照片:

Two custom Text-Edit inside a dialog

到目前爲止,每一件事情是確定的。 但是,當我按Ctrl + B爲例,我得到這個錯誤信息:

QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B 

設置快捷方式背景下WidgetWithChildrenShortcut不會幫助我消除歧義的快捷方式。

任何人有任何其他的想法?

+0

它只是用於Ctrl + B嗎?你用斜體(ctrl + i)嘗試了嗎? – dare

+0

所有快捷方式均不起作用。甚至ctrl +我(在ctrl +我奇怪的東西是一個縮進文本,我認爲這是另一個問題!) – Mostafa

+0

它似乎你定義相同的快捷方式兩次或更多在您的項目中,在不同的部分 – dare

回答

2

最後,我找到了解決方案。我的編輯器是從qtextedit繼承而來的。我將這些行添加到每個動作中,現在它就可以工作了!

void MyEditor::addActionToToolbar(QAction *a) 
{ 
    a->setShortcutContext(Qt::WidgetWithChildrenShortcut); 
    addAction(a); 

    QToolButton* btn = new QToolButton(this); 
    btn->setDefaultAction(a); 
    btn->setFocusPolicy(Qt::NoFocus); 
    btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
    btn->setIconSize(QSize(16,16)); 

    toolBar->addWidget(btn);  
} 
+1

這裏的重要部分是調用QWidget :: AddAction和QAction :: setShortcutContext(Qt :: WidgetWithChildrenShortcut); – veio

0

你需要install an event filter,在文檔中有一個很好的例子。

+0

感謝您的回覆,敢於。我做到了,但代碼有點亂。我正在尋找別的東西。 – Mostafa

1

你可以有兩個工具欄,但它們應該使用一個作用於當前焦點編輯器的動作,並且只需要一個QAction而不是多個QAction。儘管有一個QAction,你可以有多個按鈕鏈接到它。

很可能您的編輯器小部件通過定義自己的操作而表現不當。他們不應該那樣做。

+0

那麼你的解決方案是什麼?忘記我的實施和我的設計。有一個對話框有兩個富文本編輯器(可以是其他任何東西),並且每個編輯器都有自己的操作,您想爲它們定義快捷方式而不會發生衝突...... – Mostafa