2012-01-18 93 views
1

我打算在「暫停」和「設置」按鈕之間的工具欄(下面)中使用隔離器,使QToolBar內的「設置」按鈕右對齊。下面的分隔符不會切割它。Qt設計器的自定義動作插件

Toolbar in need of spacer

下面的方法顯然是工作,雖然我還沒有真正嘗試過:

QWidget* spacer = new QWidget(); 
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 
// toolBar is a pointer to an existing toolbar 
toolBar->addWidget(spacer); 
toolBar->addAction("Right-aligned button"); 

(感謝http://www.ffuts.org/blog/right-aligning-a-button-in-a-qtoolbar/

Qt設計似乎並沒有允許添加小部件到QToolBar,雖然QToolBar確實有一個addWidget()方法,如上所述。所以如果我想能夠使用Qt設計器(使用插件而不是促銷)將間隔符添加到我的工具欄中,我應該繼承QAction,QWidget還是QWidgetAction?是否有一種方法可以爲Qt Designer編寫自定義動作插件?

+0

回答「將顯示正確嗎?」問題:「由於Qt Designer在表單設計過程中使用真實的小部件,因此自定義小部件將與預覽時的相同。」 http://developer.qt.nokia.com/doc/qt-4.8/designer-creating-custom-widgets.html – 2012-01-18 03:40:28

+0

...也就是說,假設它是一個小部件。 – 2012-01-18 03:48:01

+0

當然,自定義小部件插件無法添加到Designer中的「QToolBar」中。就像任何其他小部件。自定義*動作*插件? – 2012-01-18 21:23:43

回答

0

您不能繼承QAction並希望在Qt Creator/Designer中優雅地使用它。它使用ui中的標籤並將它們添加到菜單和工具欄中。您不能像其他小部件一樣指定class =「customclass」元素。因爲行爲的處理方式不同,所以甚至無法對它們進行子類化處理,因此無法處理。

至於QWidgetAction/QWidget,如果你明白我的意思,那麼你和QActionGroup在同一條船上。 (我個人認爲這是表單設計師設計中的一大忽略!)所以在設計師中預覽也是一樣。

你可以做的最後一件事(隱形選項3)是QToolbar子類化,但是你可以繼承子類化,但是,除了普通的舊式QToolbar可以做什麼之外,你不會看到任何東西。這並不意味着它完全出來,這是我要來的點:

真正的答案將不得不隱藏選項4,作爲設計器插件子類化QToolbar(這將需要大量的代碼在你的部分如果你不知道其中有一個是否有設計器插件),表單設計器插件通常不是那麼經常,但你可以找到某人的子類工具欄,並將它自己保存到一個插件中你一步(qt創建者甚至有一個模板),然後在qt設計器和你的設置中使用它。

我知道這個問題在2年前被問到,但是當我看到一個沒有答案的問題時,我想到了那些可能會閱讀並因爲死路一條而感到沮喪的搜索者,所以如果我能貢獻我的話......我希望我至少幫助你或其他人走上正軌,祝你好運!

相關問題