我刚开始玩QML并且有一个视图,我有一堆组件如下:
Window {
....
property Component dateTumbler: ControlView {
// Definition follows
}
property Component timeTumbler: ControlView {
// More definition follows
}
// More controls
}
Run Code Online (Sandbox Code Playgroud)
这使得主QML文件编辑和维护非常冗长且繁琐.我试着把它分成不同的文件,如下所示:
// DateTumblerView.qml
component: DateTumblerView { // Not sure how to inherit here..
// Definition here
}
Run Code Online (Sandbox Code Playgroud)
我试图像这样使用它:
property component dateTumbler: DateTumblerView {}
Run Code Online (Sandbox Code Playgroud)
然而,这永远不会奏效,而且DateTumblerView从未找到过.我不确定我是否正确这样做.
[编辑] ControlView定义如下:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtMultimedia 5.5
Rectangle {
id: view
property bool darkBackground: false
Text {
id: textSingleton
}
SoundEffect {
id: …Run Code Online (Sandbox Code Playgroud) 我有利用其产生的项目中应用CMake的Qt5.7,所以当import QtQuick.Controls 2.0应用程序失败,出现以下错误加载:
插件无法加载模块 "QtQuick.Controls":无法加载库C:\ Qt的\ Qt5.7.0\5.7\msvc2015\QML\QtQuick\Controls.2\qtquickcontrols2plugind.dll:指定的模块找不到.
的CMakeLists.txt
set(CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.7.0\\5.7\\msvc2015")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Qml)
find_package(Qt5Quick)
find_package(Qt5QuickControls2)
...
add_executable(MyApp ${SRC} ${HEADER} ${RESOURCES})
target_link_libraries(MyApp
Qt5::WinMain
Qt5::Core
Qt5::Qml
Qt5::Quick
Qt5::QuickControls2
)
Run Code Online (Sandbox Code Playgroud)
DLL在visual studio输出中加载的文件:
'MyApp.exe' (Win32): Loaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick.2\qtquick2plugind.dll'. Symbols loaded.
'MyApp.exe' (Win32): Loaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll'. Symbols loaded.
'MyApp.exe' (Win32): Unloaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll'
Run Code Online (Sandbox Code Playgroud) 我需要按红色圆圈下的创建按钮,然后按此按钮我试图填充表格视图的第一行。我是 QT Quick 的新用户,请帮助我。我浪费了很多时间却没有办法。
我还提供了 UI 和代码,请查看。
谢谢 !
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.0
import QtQuick.Dialogs 1.0
import "content"
import "images"
ApplicationWindow {
visible: true
title: "Mask Editor: Subsystem"
width: 720
height: 420
minimumHeight: 400
minimumWidth: 720
statusBar: StatusBar {
id: minstatusbar
RowLayout {
id:row1
spacing: 2
width: parent.width
Button {
text:"Unmask"
}
Item { Layout.fillWidth: true }
Button {
text:"OK"
}
Button {
text:"Cancel"
}
Button {
text:"Help"
}
Button {
text:"Apply"
}
}
} …Run Code Online (Sandbox Code Playgroud) 我想要填充图标Button.这是代码:
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
Window{
id: root
title: "settings"
flags: Qt.Dialog
minimumHeight: 700
minimumWidth: 700
maximumHeight: 700
maximumWidth: 700
ColumnLayout{
id: columnLayout
anchors.fill: parent
RowLayout{
Button{
iconSource: "images/1x1.png"
checkable: true
checked: true
Layout.minimumWidth: 100
Layout.minimumHeight: 100
}
Button{
iconSource: "images/1x2.png"
checkable: true
checked: false
Layout.minimumWidth: 100
Layout.minimumHeight: 100
}
Button{
iconSource: "images/2x1.png"
checkable: true
checked: false
Layout.minimumWidth: 100
Layout.minimumHeight: 100
}
Button{
iconSource: "images/2x2.png"
checkable: true
checked: false
Layout.minimumWidth: …Run Code Online (Sandbox Code Playgroud) 我想在QML中设置中心项ListView,因此我添加了以下代码ListView:
import QtQuick 2.0
import QtMultimedia 5.5
import QtQuick.Controls 1.3
import QtQuick.Extras 1.4
import QtQuick.Layouts 1.2
import QtQuick.Window 2.2
import QtTest 1.1
Rectangle {
id: ueKeypad
width: ueMainColumnLayout.implicitWidth+2*radius
height: ueMainColumnLayout.implicitHeight+2*radius
color: "grey"
radius: 8
border.color: "#99c6f0"
border.width: 4
ColumnLayout {
id: ueMainColumnLayout
anchors.fill: parent
anchors.margins: radius
spacing: 4
RowLayout {
id: ueTextLayout
Text {
id: ueStaffLoginText
text: qsTr("Staff Login")
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.family: "Padauk"
textFormat: Text.RichText
font.pointSize: 16
font.bold: true
color: ueKeypad.border.color
Layout.fillWidth: true
} …Run Code Online (Sandbox Code Playgroud) 我在一个qml中有一个组合框,TableViewColummn我将其定义如下:
import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
ListModel {
id: comboModel
ListElement {
text: ""
Index: -1
Dims: -1
}
}
TableViewColumn {
id: imageTypeList
role: "ImageType"
title: "Image Type"
width: 100
delegate: Rectangle {
ComboBox {
anchors.verticalCenter: parent.verticalCenter
anchors.margins: 2
model: comboModel
onActivated : {
console.log(comboModel.get(index).Index)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果有disable一个组合框菜单项可以给出该项目的索引ComboBox.所以,我不想更改底层模型,但实际上只是禁用该项目而不允许用户选择它.
我想创建一个类似手风琴的动画元素,单击时会展开。这是它应该如何工作的。
当用户单击红色矩形之一时,作为实际内容的绿色矩形应该展开。我希望这个扩展是动画的。每个红色标题的绿色矩形内容的高度可能不同。
我已经能够实现点击展开行为,但没有动画。这是我目前拥有的代码。
AccordionElement.qml
import QtQuick 2.5
import QtQuick.Layouts 1.1
ColumnLayout {
id: rootElement
property string title: ""
property bool isOpen: false
default property alias accordionContent: contentPlaceholder.data
anchors.left: parent.left; anchors.right: parent.right
// Header element
Rectangle {
id: accordionHeader
color: "red"
anchors.left: parent.left; anchors.right: parent.right
height: 50
MouseArea {
anchors.fill: parent
Text {
text: rootElement.title
anchors.centerIn: parent
}
cursorShape: Qt.PointingHandCursor
onClicked: {
rootElement.isOpen = !rootElement.isOpen
}
}
}
// This will get filled with the content
ColumnLayout {
id: contentPlaceholder
visible: …Run Code Online (Sandbox Code Playgroud) 我是QMl的初学者,在QT C++中使用StackWidget做了更多.在QML中,我很困惑使用stackView并编写了以下代码:
Window {
visible: true
width: 640
height: 480
title: qsTr("Stack view")
MainForm {
StackView {
id: stackView
x: 0
y: 0
width: 360
height: 360
initialItem: page1
Rectangle {
id: page1
//anchors.fill: parent
color: "lightgreen"
Button {
id: buttonPage1
text: "back to 2"
anchors.centerIn: parent
onClicked: {
stackView.pop() //**Is THIS CORRECT**
stackView.push(page2) //**Is THIS CORRECT**
}
}
TextEdit {
id: te1
width: 105
height: 40
text: "enter"
}
}
Rectangle {
id: page2
//anchors.fill: …Run Code Online (Sandbox Code Playgroud) 我有 4 个 qml 文件和一个 main.cpp 来加载 qml 文件。我是否可以为这 4 个 qml 文件创建 1 个 dll 文件。并在不同的应用程序中使用它,如果是这样如何做到这一点。
我已经包含在我的项目中:
"import QtQuickQontrols 1.4"
但现在我需要使用 ScrollBar ,为此,我需要包括
"import QtQuickControls 2.2"
但是当我包含 2.2 版本并删除 1.4 时,我的项目被毁了...... MenuBar,TableView 出现错误!好的,当我同时包含这个版本时,它也是错误的!我确实运行了 qmake,并给了我一些建议,我应该怎么做才能实现我的 ScrollBar。我试图添加 ScrollView,但在这里面它不起作用:
....
ScrollBar.vertical: ScrollBar {...} ...}
Run Code Online (Sandbox Code Playgroud)