小编Mit*_*tch的帖子

了解Qt的QTransform旋转功能

作为这个问题的结果,我想更多地了解Qt的QTransform::rotate功能.在文档中,它说:

QTransform&QTransform :: rotate(qreal angle,Qt :: Axis axis = Qt :: ZAxis)

围绕指定轴逆时针旋转坐标系,并返回对矩阵的引用.

请注意,如果将QTransform应用于窗口小部件坐标中定义的点,则旋转方向将为顺时针方向,因为y轴指向下方.

角度以度为单位指定.

从我之前的问题,我了解到QPolygonF顺时针旋转,我必须实际逆时针旋转90度,根据rotate功能:

QPolygonF original = QPolygonF() << QPoint(0, 1) << QPoint(4, 1) << QPoint(4, 2) << QPoint(0, 2);
QTransform transform = QTransform().translate(2, 2).rotate(90).translate(-2, -2);
QPolygonF rotated = transform.map(original);
qDebug() << rotated;
Run Code Online (Sandbox Code Playgroud)

输出:

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) ) 
Run Code Online (Sandbox Code Playgroud)

例如,这个矩形:

原始矩形旋转

要旋转到此处:

新的矩形旋转

为什么是这样?为什么文档说我的调用QTransform::rotate实际上导致顺时针旋转,当我相信我不在"小部件坐标"时 - 这里没有涉及小部件.

c++ qt rotation coordinates

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

如何在QT 5.1.1上安装QtQuick 1.1

我使用Qt 5.1.1Windows上开发了一个项目,并在QML文件中使用了QtQuick 2.0导入.最近我发现我的应用程序需要OpenGL 2.0或更高版本,因此无法在具有OpenGL 1.0的系统上运行.我搜索并发现这是因为QtQuick 2.0导入.

问题是:我不能修改导入从QtQuick 2.0至1.0 QtQuick因为我得到的错误:

QtQuick 1.0  module verison is not installed
Run Code Online (Sandbox Code Playgroud)

那我怎么才能安装QtQuick 1.0呢?我还安装了QtQuile 4.7附带的Qt 4.7,但是从Qt 5.1.1移植到Qt 4.7恰好是相当困难的工作.它并不那么简单,所以我想尽量保持简单,并在Qt 5.1.1上安装QtQuick 1.0.

注意:我在QML文件中没有做奇怪的事情; QML代码应该可以正常使用QtQuick 1.0.

qt qml qt-quick qtquick2

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

如何在 QML 中隐藏菜单项

我正在使用 Qt Quick Controls 2 并为上下文菜单编写以下代码:

Menu{
    id: contextmenu
    x: ( parent.width - contextmenu.width ) / 2
    y: ( parent.height - contextmenu.height ) / 2
    modal: true

    property int selid

    MenuItem {
        text: "Compare"
        visible: isexp
    }
    Divider{ visible: isexp }
    MenuItem {
        text: "Send..."
        visible: isexp
    }
    Divider{ visible: isexp }
    MenuItem {
        text: "Edit..."
    }
    Divider{}
    MenuItem {
        text: "Delete"
    }
}
Run Code Online (Sandbox Code Playgroud)

分隔线 - 这是我的组件。isexp是对象的属性。当isexp false 菜单显示错误。查看截图: https ://s31.postimg.org/c608kdtbv/qqq.png

如何更改菜单项的可见性并正确显示菜单。感谢您的建议。

qt qml qtquick2 qtquickcontrols2

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

Qml QtQuick2 '无效的属性名称“样式”(M16)'

我正在 Qt5.7.0 QtCreator 4.1 中编写移动应用程序,我在 QtQuick qml 文件中收到错误“无效的属性名称“样式”(M16)”并且表单不想显示某些内容。我在做什么错?

我必须先在项目中配置某些内容还是使用其他类型的文件?

我尝试在某些组件上使用此属性,但它仅适用于 Text 对象,我不知道为什么。

这是我的代码:

//register_form.qml
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.1
Item {
    width: 270
    height: 480
    anchors.fill: parent

    ColumnLayout {
        id: loginLayout
        anchors.rightMargin: 15
        anchors.bottomMargin: 92
        anchors.leftMargin: 23
        anchors.topMargin: 91
        anchors.fill: parent

        TextField {
            TextFieldStyle {
                    id: phoneStyle
                    placeholderTextColor: "grey"
            }
            id: phoneField
            placeholderText: "+7 XXX XXX XX XX"
            Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
        }

        Button {
             style: //error occurs here
                 ButtonStyle {
                 } 
        id: …
Run Code Online (Sandbox Code Playgroud)

qt qt-creator qml qtquick2 qtquickcontrols2

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

QML TextEdit中的占位符文本

我正在寻找一种方法来显示文本提示,说明预期的输入作为用户的建议.以Google搜索栏为例:

在此输入图像描述

是否有我缺少的属性,或者这是必须通过脚本实现的东西?

qml qt-quick

5
推荐指数
2
解决办法
6172
查看次数

QtQuickControls2对话框在点击外部时消失

我正在尝试使用 QtQuickControls2 对话框:

    Dialog {
        id: dialog
        x: parent.width/2-width/2
        y: parent.height/2-height/2
        width:300
        height:200
        title: "Warning"
        modal: true
        standardButtons: Dialog.Ok
        visible: false
        onAccepted: console.log("Ok clicked")
    }


    Button {
        id: button
        objectName: "doSomethingButton"
        onClicked: {
            if(problemFlag==true)
                dialog.visible=true
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果按钮被点击并且problemFlag是 ,它应该被触发true。我读到如果modal设置为true用户无法与程序的其余部分交互。但是,如果我单击对话框外的某处,它就会消失(无需单击“确定”)。

qt qml qt-quick qtquickcontrols2

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

应该禁用MSVC的C4138警告("评论之外的'*/'")吗?

使用msvc2017编译以下代码时

void Foo::bar(A */*a*/)
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

foo.cpp:38: warning: C4138: '*/' found outside of comment
Run Code Online (Sandbox Code Playgroud)

我可以通过在星号后面添加一个空格来解决这个问题:

void Foo::bar(A * /*a*/)
Run Code Online (Sandbox Code Playgroud)

但是,我必须在很多地方执行此操作,如果我取消注释参数,由于额外的空间,我使用的编码样式将不会被遵循.

由于我没有用gcc或clang得到相同的警告,我想知道这是否是可以安全地禁用的特定于MSVC的怪癖.

c++ visual-c++

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

使用Qt更新/渲染游戏对象

我想知道在使用Qt时如何更新和渲染游戏对象.例如,对于一个典型的游戏,你会有一个事件循环,但Qt就是这样exec().使用Qt更新和渲染游戏对象的正确方法是什么?我如何做每个帧之间的时间来更新我的游戏对象?我是否为所有这些使用单独的线程?

我的问题非常类似于这个主题,除了我不想避免标准的Qt进程.

编辑:我为不完整的问题道歉.我相信tmpearce已经回答了我的问题,但这里有一个基本的例子,说明我试图做的事情以防其他人有同样的问题:

int main(int argv, char **args)
{
    QApplication app(argv, args);

    ApplicationWindow window;
    window.show();

    // How and where do I update my Game object?

    return app.exec();
}

class Game
{
public:
    void timeUpdate()
    {
        // Update game entities, etc. Should be called every frame.
    }

    void render()
    {
        // Renders game entities - where should I render to?
        // Should be called 30 times a second, etc.
    }
};
Run Code Online (Sandbox Code Playgroud)

干杯.

c++ qt event-loop

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

使用Qt Quick缩放像素艺术

我有一个使用像素艺术的Qt Quick游戏.例如:

import QtQuick 2.2
import QtQuick.Controls 1.1

ApplicationWindow {
    id: window
    visible: true
    width: 300
    height: 300
    title: qsTr("PixelArt")

    Image {
        source: "http://upload.wikimedia.org/wikipedia/commons/f/f0/Pixelart-tv-iso.png"
        anchors.centerIn: parent
    }
}
Run Code Online (Sandbox Code Playgroud)

原始尺寸

我想缩放艺术,所以我增加了尺寸:

import QtQuick 2.2
import QtQuick.Controls 1.1

ApplicationWindow {
    id: window
    visible: true
    width: 300
    height: 300
    title: qsTr("PixelArt")

    Image {
        source: "http://upload.wikimedia.org/wikipedia/commons/f/f0/Pixelart-tv-iso.png"
        anchors.centerIn: parent
        width: 256
        height: 256
    }
}
Run Code Online (Sandbox Code Playgroud)

糟糕的缩放

图像变得模糊.如何在保持其"清晰度"的同时缩放图像,使其看起来像这样:

好缩放

scaling qt qml qt-quick pixelate

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

计算用于放大鼠标光标位置的视图偏移量

我有一个"画布",用户可以在上面绘制像素等.它运行良好,但我的缩放功能目前使用相同的原点,无论鼠标的位置如何.我想实现类似谷歌地图缩放行为的功能:

谷歌地图缩放

也就是说,缩放的原点应该始终是鼠标光标的位置.

我目前所拥有的并不完全正确......

我的尝试大多是在黑暗中刺伤,但我也试过使用这个答案的代码没有成功.

main.cpp:

#include <QGuiApplication>
#include <QtQuick>

class Canvas : public QQuickPaintedItem
{
    Q_OBJECT

public:
    Canvas() :
        mTileWidth(25),
        mTileHeight(25),
        mTilesAcross(10),
        mTilesDown(10),
        mOffset(QPoint(400, 400)),
        mZoomLevel(1)
    {
    }

    void paint(QPainter *painter) override {
        painter->translate(mOffset);

        const int zoomedTileWidth =  mTilesAcross * mZoomLevel;
        const int zoomedTileHeight =  mTilesDown * mZoomLevel;
        const int zoomedMapWidth = qMin(mTilesAcross * zoomedTileWidth, qFloor(width()));
        const int zoomedMapHeight = qMin(mTilesDown * zoomedTileHeight, qFloor(height()));
        painter->fillRect(0, 0, zoomedMapWidth, zoomedMapHeight, QColor(Qt::gray));

        for (int y = 0; y < …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquick2

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