小编SR_*_*SR_的帖子

在Qt Quick(QML)Flickable中实现缩放/缩放的正确方法

我正在使用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)

zoom scale qml qt5 qtquick2

8
推荐指数
1
解决办法
8050
查看次数

QML对象类型不是QTCreator中的类型错误

大家好我是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 qml qqmlcomponent

8
推荐指数
3
解决办法
1万
查看次数

Qt 应用程序状态生命周期

我从 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)

c++ qt

5
推荐指数
1
解决办法
5046
查看次数

为什么 C++ 三元运算符返回类型不能是基类类型?

如果我理解正确,则三元运算符具有返回类型。返回类型是从三元运算符的第二个和第三个参数类型推导出来的。如果我在不使用其结果的情况下编写三元运算符(下面的 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)

编辑:更正示例以反映问题与切片无关。

编辑:要清楚,我不是在问为什么代码不能编译。有很多问题在问为什么。我在问为什么 …

c++

5
推荐指数
0
解决办法
81
查看次数

专门的QValidator和QML UI更改

我正在学习Qt 5.5和QML.

框架很强大,有时候有很多方法可以做一件事.我认为有些可能比其他人更有效率,我想知道何时以及为何使用一个而不是另一个.
我想要一个可以解释所做出的选择的答案.当我使用新代码时,如果在C++端有用,可以使用C++ 11和C++ 14语法.

要解决的问题是:
我已经TextField链接到一个可以弹出的按钮FileDialog.我想在文本TextFieldred当它是无效的,并保持不变,否则(我把它设置为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)

c++ validation qml qt5 qtquick2

1
推荐指数
1
解决办法
2341
查看次数

标签 统计

c++ ×3

qml ×3

qt ×2

qt5 ×2

qtquick2 ×2

qqmlcomponent ×1

scale ×1

validation ×1

zoom ×1