我安装了最新的Ubuntu SDK并尝试使用Qt Quick Controls但它们不可用.然后我从https://qt-project.org/downloads安装了Qt 5.2.1并创建了一个选择了Qt Quick Controls选项的新项目.当我尝试构建和运行应用程序时,输出中出现以下消息:
Starting /usr/lib/x86_64-linux-gnu/qt5/bin/qmlscene...
file:///home/george/Projects/untitled/untitled.qml:2 module "QtQuick.Controls" is not installed
Run Code Online (Sandbox Code Playgroud)
我尝试卸载Ubuntu SDK和Qt,然后从官方网站重新安装Qt但没有成功.Qt Creator或qmlscene似乎都找不到该模块.
这个问题的答案(https://askubuntu.com/questions/368507/are-qt-quick-controls-available-on-ubuntu-13-10)说"Trusty Tahr可能会有Qt 5.1或Qt 5.2 in它的存储库." 那个官方的qt项目包应该有效.
难道我做错了什么 ?这可能是Qt Installer的错误吗?
我有一个图像提供程序派生自QQuickImageProvider实现requestPixmap.
此图像提供程序适用于Image组件.
现在我想以同样的方式提供imageSourcea Button.但没有图像出现.可能是什么问题?
QML代码
Image {
anchors.fill: parent
anchors.margins: 10
source: "image://provider/" + model.DisplayRole
fillMode: Image.PreserveAspectFit
}
Button {
Layout.fillWidth: true
Layout.preferredHeight: width
iconSource: "image://provider/" + model.DisplayRole
onClicked: appCore.switch(model.DisplayRole)
}
Run Code Online (Sandbox Code Playgroud)
C++代码
QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
QModelIndex index;
bool foundId = false;
for(int row = 0; row < m_myModel->rowCount(); row++)
{
index = m_myModel->index(row, 0);
QString name = QVariant(m_myModel->data(index, Qt::DisplayRole)).toString();
if(name == id)
{
foundId …Run Code Online (Sandbox Code Playgroud) 我现在正在尝试将我的应用UI从C++转换为QML.在某些步骤我需要一个登录窗口,所以我用QML创建它,代码如下:
Window {
id: loginWindow
property string username: login.text;
property string password: password.text;
property bool issave: savePassword.checked;
flags: Qt.Dialog
modality: Qt.WindowModal
width: 400
height: 160
minimumHeight: 160
minimumWidth: 400
title: "Login to program"
GridLayout {
columns: 2
anchors.fill: parent
anchors.margins: 10
rowSpacing: 10
columnSpacing: 10
Label {
text: "Login"
}
TextField {
id: login
text: Config.getParam("user")
Layout.fillWidth: true
}
Label {
text: "Password"
}
TextField {
id: password
text: Config.getParam("password")
echoMode: TextInput.Password
Layout.fillWidth: true
}
Label {
text: "Save password?" …Run Code Online (Sandbox Code Playgroud) 我有一个矩形,文本和垂直布局中的Flickable.当我垂直轻拂可轻弹的内容时,它会进入Text组件的前面.怎么能让它落后?在移出境外时,如何制作可滑动隐藏的内容?
在使用QtQuick控件的QtQuick 2中,您可以创建复杂的桌面应用程序.然而,在我看来,必须在应用程序开始时声明整个UI并立即创建所有UI.您仍然不想使用任何您不想使用的部分(例如文件 - >打开对话框),但它们是隐藏的,如下所示:
ApplicationWindow {
FileDialog {
id: fileOpenDialog
visible: false
// ...
}
FileDialog {
id: fileSaveDialog
visible: false
// ...
}
// And so on for every window in your app and every piece of UI.
Run Code Online (Sandbox Code Playgroud)
现在,对于简单的应用程序来说这可能没问题,但对于复杂的应用程序或具有许多对话框的应用程序,这肯定是一件疯狂的事情吗?在传统的QtWidgets模型中,您可以在需要时动态创建对话框.
我知道有一些解决方法,例如你可以Loader在javascript中直接动态使用甚至创建QML对象,但它们非常难看,你会失去优秀的QML语法的所有好处.你也无法真正"卸载"组件.那么Loader声称你可以,但我尝试过了,我的应用程序崩溃.
这个问题有优雅的解决方案吗?或者我只需要咬紧牙关并立即为我的应用创建所有潜在的用户界面,然后隐藏其中的大部分内容?
注意:此页面包含有关使用Loaders来解决此问题的信息,但正如您所看到的,它不是一个非常好的解决方案.
好的,为了向您展示为什么Loader不那么令人愉快,请考虑这个开始一些复杂任务并等待结果的示例.假设 - 与人们通常给出的所有琐碎的例子不同 - 任务有很多输入和几个输出.
这是Loader解决方案:
Window {
Loader {
id: task
source: "ComplexTask.qml"
active: false
}
TextField {
id: input1
} …Run Code Online (Sandbox Code Playgroud) 来自:http://doc.qt.io/qt-5/qml-qtquick-controls-tabview.html#details
TabView
{
Tab {
title: "Red"
Rectangle { color: "red" }
}
Tab {
title: "Blue"
Rectangle { color: "blue" }
}
Tab {
title: "Green"
Rectangle { color: "green" }
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,这些选项卡显示在水平栏中.如何在单独的行中显示它们?
像这样:
Tab1
Tab2
Tab3
而不是:
Tab1 Tab2 Tab3
我有这个代码:
import QtQuick 2.3
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
Dialog {
standardButtons: StandardButton.Ok | StandardButton.Cancel
width: layout.implicitWidth
height: layout.implicitHeight
RowLayout {
id: layout
anchors.fill: parent
Item {
width: 10
height: 1
}
GridLayout {
columns: 2
rowSpacing: 10
Layout.fillHeight: true
Layout.fillWidth: true
Text {
text: "Hello world? "
}
Text {
text: "Hello world!"
}
Text {
text: "Goodbye world? "
}
Text {
text: "Goodbye world!"
}
}
Item {
width: 10
height: 1
} …Run Code Online (Sandbox Code Playgroud) 如何更改QML菜单项的文本颜色MenuBar?
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.3 as QtQuickControlStyle
ApplicationWindow {
title: qsTr("Test")
width: 640
height: 480
visible: true
property color menuBackgroundColor: "#3C3C3C"
property color menuBorderColor: "#282828"
menuBar: MenuBar {
style: QtQuickControlStyle.MenuBarStyle {
padding {
left: 8
right: 8
top: 3
bottom: 3
}
background: Rectangle {
border.color: menuBorderColor
color: menuBackgroundColor
}
// font: // how to set font color to red?
// textColor: "red" /* does not work …Run Code Online (Sandbox Code Playgroud) 我查看了类似的线程,但并没有太大帮助。
我使用QtQuick.Controls.Buttonin QML,将鼠标悬停在按钮上时无法更改光标形状!我想不使用实现此目的MouseArea。该怎么办?当我查看文档时,找不到cursorShape属性或类似属性。
我想要使用Qt Quick QML的半透明矩形,但仅在一侧具有圆角。
这是我想要的矩形的形状。如果看不到,我可能会重叠2个矩形,一个带有圆角,另一个没有。但是,这不适用于透明度,因为重叠会变暗。
----------|
/ |
/ |
| |
| |
| |
\ |
\ |
----------|
Run Code Online (Sandbox Code Playgroud)
有人有什么想法吗?