我正在使用Qt 5.2 beta,Qt Quick 2.1.
我有直接的Flickable组件问题.
这是最小的工作代码示例:
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
width: 300
height: 200
Rectangle {
anchors.fill: parent
color: "green"
Flickable {
id: flickArea
anchors {fill: parent; margins: 10; }
contentWidth: rect.width;
contentHeight: rect.height
Rectangle {
id: rect
x: 0; y: 0;
width: 200; height: 300;
color: "lightgrey"
Rectangle {
anchors { fill: parent; margins: 10; }
color: "red"
}
}
}
}
Button {
anchors.bottom: parent.bottom;
anchors.horizontalCenter: parent.horizontalCenter;
text: "Scale flickArea"
onClicked: …Run Code Online (Sandbox Code Playgroud) 大家好我是QT的新手,我无法通过另一个qml加载一个qml基本上我已经创建了一个qml MyTabView(MyTabView.qml)
import QtQuick 2.3
import QtQuick.Controls 1.2
TabView {
width: 360
height: 360
Component.onCompleted: {
addTab("Tab 1", tab1)
addTab("Tab 2", tab2)
}
Component {
id: tab1
Rectangle {color: "red"}
}
Component {
id: tab2
Rectangle {color: "blue"}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过另一个qml(main.qml)显示它在同一目录中
import QtQuick 2.3
import QtQuick.Controls 1.2
import "."
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Main")
MyTabView {}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行我的项目时,我得到了这个错误
QQmlApplicationEngine无法加载组件qrc:/qml/main.qml:11 TabView不是一个类型
请注意我在MyTabView.qml中有M Caps,MyTabView.qml和main.qml在同一目录中.
有人能指出我在做什么错吗?我想指出的一件事是,当我替换MyTabView.qml的所有代码而不是MyTabView {}内部时main.qml,程序不会给出任何错误并正确运行.提前致谢
我从 Qt 开始,但我不清楚应用程序状态。我使用 Qt 5.5。我目前正在 Windows 上学习,但下一步是 Android 设备,因此我关注应用程序状态。
我创建了自己的QApplication派生类,我已经注册了applicationStateChanged信号。我猜想我应该在applicationStateChanged收到信号时保留部分配置。我想我必须使用Qt.labs.settings,就像我想使用 QML 一样。
显然,我在很多事情上都错了。首先,我没有收到任何Qt::ApplicationSuspended消息。
我已经重写了以QApplication::event(e)查看是否错过了信号,并且似乎只Quit发送了事件。
QML debugging is enabled. Only use this in a safe environment.
void LAACApplication::event(QEvent *e = QEvent(LanguageChange, 0x28fd00) )
void LAACApplication::event(QEvent *e = QEvent(DynamicPropertyChange, 0x28fcbc) )
void LAACApplication::event(QEvent *e = QEvent(LanguageChange, 0x28fa70) )
void LAACApplication::event(QEvent *e = QEvent(ApplicationActivate, 0x28daf4) )
void LAACApplication::event(QEvent *e = QApplicationStateChangeEvent(ApplicationActive) )
void LAACApplication::onApplicationStateChanged(Qt::ApplicationState state = Qt::ApplicationState(ApplicationActive) )
void …Run Code Online (Sandbox Code Playgroud) 如果我理解正确,则三元运算符具有返回类型。返回类型是从三元运算符的第二个和第三个参数类型推导出来的。如果我在不使用其结果的情况下编写三元运算符(下面的 L2),则没有其他信息可以推断返回类型。所以,如果我们想有一种方法来推导返回类型,我们不能依赖,例如,我们将三元运算符(下面的 L1)返回的值放入其中的变量的类型。
但是,与其尝试将类型相互转换(这可能是不可能的),为什么不在标准中引入基类用例呢?
也就是说,如果参数 2 和 3 有一个公共基类,请将其用作三元运算符的返回类型(以与其他现有规则兼容的方式)用于引用/指针类型。它将允许单行常量引用/指针初始化(如下面的 L3,但没有强制转换)。
我想有一个很好的理由不这样做。
class A {};
class B : public A {};
class C : public A {};
int main()
{
B* b = new B;
C* c = new C;
A * a1 = true ? b : c; // L1 does not compile
true ? b : c; // L2 does not compile
const A * a2 = false ? static_cast<A*>(b) : static_cast<A*>(c); // L3 does compile
}
Run Code Online (Sandbox Code Playgroud)
编辑:更正示例以反映问题与切片无关。
编辑:要清楚,我不是在问为什么代码不能编译。有很多问题在问为什么。我在问为什么 …
我正在学习Qt 5.5和QML.
框架很强大,有时候有很多方法可以做一件事.我认为有些可能比其他人更有效率,我想知道何时以及为何使用一个而不是另一个.
我想要一个可以解释所做出的选择的答案.当我使用新代码时,如果在C++端有用,可以使用C++ 11和C++ 14语法.
要解决的问题是:
我已经TextField链接到一个可以弹出的按钮FileDialog.我想在文本TextField是red当它是无效的,并保持不变,否则(我把它设置为green,因为我不知道如何让"默认"的颜色).它的值TextField将在C++端使用,并在应用程序退出时保持不变.
我使用自定义QValidator,QML方面的一些属性,使用onTextChanged:和onValidatorChanged:修改文本的颜色编写了一个版本.根据validQML中的属性()设置文本颜色,该属性是从C++端(在验证器中)设置的.要设置属性,C++必须按名称查找调用者(TextField命名directoryToSave),因为我还没有找到将对象本身作为参数传递的方法.
以下是包含在以下内容中的QML代码MainForm.ui.qml:
TextField {
property bool valid: false
id: directoryToSave
objectName: 'directoryToSave'
Layout.fillWidth:true
placeholderText: qsTr("Enter a directory path to save to the peer")
validator: directoryToSaveValidator
onTextChanged: if (valid) textColor = 'green'; else textColor = 'red';
onValidatorChanged:
{
directoryToSave.validator.attachedObject = directoryToSave.objectName;
// forces validation
var …Run Code Online (Sandbox Code Playgroud)