2017-03-16 57 views
1

我需要類似範圍滑塊(具有用於設置最小/最大值的兩個手柄的滑塊)。爲什麼RangeSlider在QtQuick中可用,而不是標準Widget

我注意到在QtQuick和QML中有一個RangeSlider(不管是什麼),但是沒有'標準小部件',如QRangeSlider

這是爲什麼?

我可以在不寫QML代碼的情況下使用QtQuick的RangeSlider嗎?

回答

3

在我的項目中,我成功地使用了Common TK range slider

它看起來像這樣:

enter image description here

實用類準備在這裏去:CPPheader

+0

此風格是由您定義的,還是操作系統的默認設置?或者更糟的是,這個小部件定義了這種風格嗎? – manatttta

+0

這是一張來自Common TK網站(http://www.commontk.org/index.php/Documentation/ImageGallery)的截圖。它看起來像Gnome風格,但我認爲你可以使用Qt樣式表來定製它 –

+0

在我的應用程序中,它看起來像這樣(使用Linux KDE):http://www.qlcplus.org/features/vcxypad.png。在任何情況下,風格取決於操作系統 –

2

由於Qt Widgets是一個「舊」庫,而且Qt開發人員,特別是Qt公司,除了必要的缺陷修復之外,並不適用於它。

儘管Qt Quick Controls(1和2)更新,並且得到了所有人的關注。

此外,Qt Quick和Qt Widgets的內容之間沒有任何關聯,它們完全不相關的庫,即更改或更新一個不會導致另一個的更改或更新。

(因爲Qt Quick的控制1使用Qt小工具,做一些造型並非完全正確,但據公開可用的組件而言這適用)

你一般不能混用Qt控件和Qt Quick的組件,這些組件以完全不同的方式呈現,Qt Widgets使用QPainter,而Qt Quick則使用SceneGraph。但是您可以使用QQuickWidget在Qt Widgets應用程序中渲染Qt Quick場景,以便您可以製作一個內部顯示Qt Quick RangeSlider的RangeSlider小部件。

+0

我如何使用從QtQuick那麼這些窗口小部件之一? – manatttta

+0

@manatttta我已經更新了我的答案,它應該回答你的問題。 –

2

由於RangeSlider是你需要使用它QML上下文QML類型。QQuickWidget只是一個QWidget,專門在加載和顯示QML內容。事實上,它只是它的另一個子類,使您可以將它集成到您​​選擇的QWiget中。對於如何將這兩個集成的例子見here(示例中使用QMainWindow,但你可以使其適應您的需求

我在標準QWidget這個失蹤的UI組件的猜測是:

  • 開發人員可以通過調整QSliderexample
  • 很容易地創建QWidget相關的東西,因爲Qt公司的新功能基本上是死的,因爲它們全速向QML發展。我不喜歡它,但是這就是事情
  • 範圍滑塊並不是那麼受歡迎。您可以輕鬆地更換滑塊(需要支持的範圍)與兩個滑塊(一個較低和一個上限),兩個QSpinBox ES等

更好的解決辦法是放棄了QML的東西此並用C++實現你自己的版本。

+0

'QGraphicsScene'不再作爲自Qt 5以來Qt Quick的後端。 –

+0

您是對的。我已經忘記了這一點。但是你仍然可以使用'QQuickWidget'來加載'QWidget'內的QML內容,並在QML和C++代碼之間建立所需的連接。 – rbaleksandar

+1

這是一個可怕的想法! Creste一個qml上下文來顯示一個小部件!?爲什麼不在你使用webkit的時候加載webkit,或者啓動一個python的實例。 –

相關問題