小编Mit*_*tch的帖子

QGraphicsScene在QGraphicsView中奇怪地缩放

我正在搞乱QGraphicsViewQGraphicsScene创建一个Tic Tac Toe克隆.我在QGraphicsLineItem场景中添加一些s并覆盖resizeEvent包含视图的Widget 的方法,这样当调整窗口大小时,视图及其内容将被适当缩放.这工作正常,除了我第一次运行程序:

缩放不正确

一旦我按任意数量调整窗口大小,场景就会正确缩放:

正确缩放

这是代码:

main.cpp中:

#include <QtGui>

#include "TestApp.h"

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

    TestApp window;
    window.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

TestApp.h:

#ifndef TEST_APP_H
#define TEST_APP_H

#include <QtGui>

class TestApp : public QMainWindow
{
    Q_OBJECT
public:
    TestApp();
protected:
    void resizeEvent(QResizeEvent* event);

    QGraphicsView* view;
    QGraphicsScene* scene;
};

#endif
Run Code Online (Sandbox Code Playgroud)

TestApp.cpp:

#include "TestApp.h"

TestApp::TestApp()
: view(new QGraphicsView(this))
, scene(new QGraphicsScene(this))
{
    resize(220, 220);
    scene->setSceneRect(0, 0, 200, 200);

    const int BOARD_WIDTH …
Run Code Online (Sandbox Code Playgroud)

c++ scaling qt qgraphicsview qgraphicsscene

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

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

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

谷歌地图缩放

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

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

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

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
查看次数

使用ListView拖放创建库存UI

我想使用ListView为我的游戏创建一个库存用户界面,通过在级别中拖放项目,可以从库存中删除这些项目.如果物品未正确掉落(仍在库存内),则应将其放回拖动前的位置.

我有以下代码,但我不知道如何实现我所追求的,即使在查看拖放示例之后.

import QtQuick 2.3

Rectangle {
    id: root
    width: 400
    height: 400

    ListView {
        id: listView
        width: parent.width / 2
        height: parent.height

        model: ListModel {
            Component.onCompleted: {
                for (var i = 0; i < 10; ++i) {
                    append({value: i});
                }
            }
        }

        delegate: Item {
            id: delegateItem
            width: listView.width
            height: 50

            Rectangle {
                id: dragRect
                width: listView.width
                height: 50
                anchors.horizontalCenter: parent.horizontalCenter
                anchors.verticalCenter: parent.verticalCenter
                color: "salmon"
                border.color: Qt.darker(color)

                Text {
                    anchors.centerIn: parent
                    text: modelData
                }

                MouseArea {
                    id: …
Run Code Online (Sandbox Code Playgroud)

qt listview drag-and-drop qml

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

使用Qt Creator中的正则表达式查找并替换多个文件

我正在编写一个C++库,并且记得我需要导出每个类.

以下代码:

class MyClass
Run Code Online (Sandbox Code Playgroud)

应成为:

class MY_EXPORT MyClass
Run Code Online (Sandbox Code Playgroud)

我有几个类需要这个改变 - 有没有办法使用Qt Creator做到这一点?

c++ regex replace qt-creator

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

QApplication 和 QAbstractNativeEventFilter 的多重继承

我想在我的 Qt 应用程序中过滤 USB 设备插入/删除事件。因此,我需要使用installNativeEventFilter()将本机偶数过滤器(源自QAbstractNativeEventFilter)安装到我的应用程序中。问题是我需要从我的事件过滤器发出一些信号,并将它们连接到我的应用程序中的插槽。所以,如果我可以从QApplicationand 中继承QAbstractNativeEventFilter,那么信号和槽都在同一个类中,连接起来更方便。但是下面的代码安全吗?

class QApp  : public QApplication, public QAbstractNativeEventFilter
{
    virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE;
signals:
    void deviceChanged();
    ...
};

QApp a(argc, argv);
a.installNativeEventFilter( &a );
Run Code Online (Sandbox Code Playgroud)

qt

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

QML 布局中的元素自动换行

如果下一个元素的宽度超过指定布局的宽度,是否有 QML 布局或某些配置会自动将 QML 项目包装到下一行?

当我使用QML GridLayout时,项目只是离开窗口边缘并被剪切:

GridLayout {
    id: header_focused_container;
    width: parent.width;
    anchors.margins: 20;
    Text {
        text: "header_focused_container.width=" + 
            header_focused_container.width + 
            " and my width is =" + width
    }
    Rectangle { height:20; width:250; color: "red" }
    Rectangle { height:20; width:250; color: "blue" }
    Rectangle { height:20; width:250; color: "green" }
}
Run Code Online (Sandbox Code Playgroud)

网格布局工作[1]

当我查看 Qt 标记为“可扩展性”的文档页面时,我发现正在进行非常手动的缩放。基本上,他们建议我需要计算所需的列。

是否有某种布局类型或配置可以自动换行项目?

qml qt5 qtquick2

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

std::sort 崩溃 - 没有严格弱排序的排序

我正在尝试对项目向量进行排序。正如代码注释中提到的,顺序应该是:

行动分较多(mAp)的参与者先行。当平局时,mDisposition与战斗发起者 ( )性格相同 ( ) 的参与者mBattleInitiator先行。

以下代码(简化示例)在 macOS 上崩溃,可能是由于我的排序实现不正确:

#include <QtCore>

class AiComponent
{
public:
    enum Disposition {
        Friendly,
        Hostile
    };

    AiComponent(Disposition disposition) : mDisposition(disposition) {}
    ~AiComponent() { qDebug() << "Destroying AiComponent"; }

    Disposition mDisposition;
};

class BattleManager
{
public:
    BattleManager() : mBattleInitiator(AiComponent::Hostile) {}

    class Turn {
    public:
        Turn() : mAp(1) {}

        Turn(QSharedPointer<AiComponent> aiComponent) :
            mAiComponent(aiComponent),
            mAp(1)
        {
        }

        Turn(const Turn &rhs) :
            mAiComponent(rhs.mAiComponent),
            mAp(1)
        {
        }

        QSharedPointer<AiComponent> mAiComponent;
        int mAp;
    };

    void …
Run Code Online (Sandbox Code Playgroud)

c++ sorting strict-weak-ordering

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

QJSEngine评估的结果不包含函数

我正在将QScriptEngine代码迁移到QJSEngine,并且遇到了一个问题,我在评估脚本后无法调用函数:

#include <QCoreApplication>
#include <QtQml>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QJSEngine engine;
    QJSValue evaluationResult = engine.evaluate("function foo() { return \"foo\"; }");

    if (evaluationResult.isError()) {
        qWarning() << evaluationResult.toString();
        return 1;
    }

    if (!evaluationResult.hasProperty("foo")) {
        qWarning() << "Script has no \"foo\" function";
        return 1;
    }

    if (!evaluationResult.property("foo").isCallable()) {
        qWarning() << "\"foo\" property of script is not callable";
        return 1;
    }

    QJSValue callResult = evaluationResult.property("foo").call();
    if (callResult.isError()) {
        qWarning() << "Error calling \"foo\" function:" << …
Run Code Online (Sandbox Code Playgroud)

javascript c++ qt qtscript qjsengine

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

在QML中访问C++对象的成员变量

有没有办法在QML中访问C++对象的成员变量?在main.cpp我揭露的目的是QML.如何controller.x在QML中访问?

Controller ctrl;
QQuickView view;
QQmlContext* ctx = view.rootContext();
ctx->setContextProperty("controller", &ctrl);
Run Code Online (Sandbox Code Playgroud)

在控制器中:

public:
 int x;
Run Code Online (Sandbox Code Playgroud)

c++ qt object qml

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

QML 标签最大宽度和多行

我有一个标签,但它应该只和表格一样长。如果标签较长,则应从新行开始。我怎么能意识到这一点?我正在使用 QtQuick Controls 2.0

我当前的标签代码:

Label {
    id: lblMsg
    width: ApplicationWindow.width - 10 // not working
    text: "ajksdlldjklasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
    x: 20
    y: 20
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquickcontrols2

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

C ++ QQuickItem:如何在项目尺寸更改时触发功能

我在C ++中有一个QQuickItem,它在QML应用程序中实例化。如果我的QQuickItem的width属性改变,我想在c ++端触发一个自定义函数。

在QML中,我将执行onWidthChanged:{我的代码}。我该如何在c ++方面做到这一点?

qt qml qtquick2

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

BB10 - 启用Qml调试.只能在安全的环境中使用它

我正在使用momentics IDE(原生SDK)开发BlackBerry 10移动应用程序.

当我尝试构建项目并在设备上测试它(BlackBerry Dev alpha B)时,它会无缘无故崩溃并出现以下错误:

"启用了Qml调试.只能在安全的环境中使用它!"

我真的不知道它来自哪里,我在网上搜索了很多没有结果.拜托,有没有人对此有任何想法?

c++ qt blackberry qml blackberry-10

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