Qt Quick Controls 2和TableView

时间:2017-04-15 08:37:12

标签: qt qml qtquickcontrols qtquickcontrols2

在Quick Controls 2.0应用程序中使用TableView是否可以? 这将需要两个导入:

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0

我会得到任何副作用吗?

另一个相关问题:似乎TableView属于Quick Controls 1.0集。是吗?这是否意味着如果可以使用TableView,那么可以使用Quick Controls 2.0应用程序中的所有Quick Controls 1.0控件吗?

2 个答案:

答案 0 :(得分:20)

虽然可以在同一个应用程序中混合Qt Quick Controls 1和2,但最大的问题是Qt Quick Controls 1与Qt的自动高DPI缩放不兼容,而Qt Quick Controls 2的可扩展性基于。因此,运行混合这两者的应用程序可能无法在高DPI显示器上提供理想的结果。

鉴于Qt Quick Controls 1 TableView存在严重的性能问题,一种可能的替代方法是使用Qt Quick核心的ListView Row作为委托。ListView作为委托。使用Qt 5.9及更高版本,可以明确指定内容宽度和轻弹方向,以便垂直import QtQuick 2.9 import QtQuick.Controls 2.2 ApplicationWindow { id: window width: 360 height: 360 visible: true ListView { id: listView anchors.fill: parent contentWidth: headerItem.width flickableDirection: Flickable.HorizontalAndVerticalFlick header: Row { spacing: 1 function itemAt(index) { return repeater.itemAt(index) } Repeater { id: repeater model: ["Quisque", "Posuere", "Curabitur", "Vehicula", "Proin"] Label { text: modelData font.bold: true font.pixelSize: 20 padding: 10 background: Rectangle { color: "silver" } } } } model: 100 delegate: Column { id: delegate property int row: index Row { spacing: 1 Repeater { model: 5 ItemDelegate { property int column: index text: qsTr("%1x%2").arg(delegate.row).arg(column) width: listView.headerItem.itemAt(column).width } } } Rectangle { color: "silver" width: parent.width height: 1 } } ScrollIndicator.horizontal: ScrollIndicator { } ScrollIndicator.vertical: ScrollIndicator { } } } 也可以水平滑动。这是一个过于简单的多列列表示例,您已经可以尝试使用最新的Qt 5.9 beta:

TableView

当然,这种简化的多列列表不提供可移动和可调整大小的列以及内置于良好的旧function findContactInfo($str) { // Find possible email $pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.[a-z]{2,3}?/i'; $emailresult = preg_match($pattern, $privateMessageText); // Find possible phone number preg_match_all('/[0-9]{3}[\-][0-9]{6}|[0-9]{3}[\s][0-9]{6}|[0-9]{3}[\s][0-9]{3}[\s][0-9]{4}|[0-9]{9}|[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches); $matches = $matches[0]; } 类型中的其他铃声和口哨等功能。另一方面,性能处于完全不同的水平,因此如果您的目标不是在具有无穷无尽资源的计算机上运行的经典桌面环境,那么这条路线可能值得考虑。 ;)

答案 1 :(得分:10)

import QtQuick.Controls 1.4 as C
import QtQuick.Controls 2.0

C.TableView {  //controls 1.4
   Button {  //controls 2.0
   }
}

这有助于避免两个控件之间发生任何不必要的冲突