小编Ker*_*nic的帖子

QGraphicsItem :模拟不是左上角的项目原点

我的应用程序正在使用 Qt。

我有一个继承QGraphicsPixmapItem的类。

在这些项目上应用变换(例如,旋转)时,项目的原点(或枢轴点)始终是左上角。

我想改变这个原点,例如,当设置项目的位置时,这实际上会改变像素图的中心。

或者,如果我应用旋转,旋转的原点将是像素图的中心。

我还没有找到一种直接用 Qt 来实现它的方法,所以我想像这样重新实现itemChange()

QVariant JGraphicsPixmapItem::itemChange(GraphicsItemChange Change, const QVariant& rValue)
{
    switch (Change)
    {
    case QGraphicsItem::ItemPositionHasChanged:
        // Emulate a pivot point in the center of the image
        this->translate(this->boundingRect().width() / 2,
                        this->boundingRect().height() / 2);
        break;
    case QGraphicsItem::ItemTransformHasChanged:
        break;
    }
    return QGraphicsItem::itemChange(Change, rValue);
}
Run Code Online (Sandbox Code Playgroud)

我认为这会起作用,因为Qt 的文档提到项目的位置及其变换矩阵是两个不同的概念。

但它不起作用。

任何的想法 ?

qt qgraphicsitem qgraphicspixmapitem

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

如何迭代 QMultiHash 中的所有 values()

我需要遍历 aQMultiHash并检查与每个键对应的值列表。我需要使用可变迭代器,以便在满足特定条件时从哈希中删除项目。 该文档没有解释如何访问所有值,只是第一个。此外,API 仅提供一种value()方法。如何获取特定键的所有值?

这就是我想要做的:

QMutableHashIterator<Key, Value*> iter( _myMultiHash );
while( iter.hasNext() )
{
    QList<Value*> list = iter.values();  // there is no values() method, only value()
    foreach( Value *val, list )
    {
        // call iter.remove() if one of the values meets the criteria
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ qt iterator qt4 multimap

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

如何在QAbstractItemModel中设置QCheckBox?

我有一个模特

class TreeModel : public QAbstractItemModel
Run Code Online (Sandbox Code Playgroud)

我填充了我的TreeItem排除列== 1的实例.在第1列中,我创建了CheckBoxes:

QVariant TreeModel::data(const QModelIndex &index, int role) const {
    if (!index.isValid())
        return QVariant();

    if (role != Qt::DisplayRole) {
        if (role == Qt::CheckStateRole) {
            if (index.column() == 1) {
                if (index.row() == 1) {
                    return Qt::Unchecked;
                } else
                    return Qt::Checked;
            }
        }
        return QVariant();
    }
    if (role == Qt::DisplayRole) {
        if (index.column() != 1) {
            TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
            return item->data(index.column());
        }
    }
    return QVariant();
  } …
Run Code Online (Sandbox Code Playgroud)

c++ checkbox qt qtreeview qabstractitemmodel

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

QMap 和 QMultiMap 中的项目顺序

我想使用QMultiMap(源自QMap)来存储键/值对。由于我可以多次使用密钥,因此我更愿意使用QMultiMap.

假设我会按给定的顺序插入以下对:

"C" -> 5
"A" -> 10
"B" -> 77
"B" -> 1
"X" -> 314159
Run Code Online (Sandbox Code Playgroud)

在迭代地图时(最好使用 java 风格的迭代器),我需要保留相等键对的顺序。即,"B" -> 77并且"B" -> 1在迭代时应该完全按照插入顺序出现。不同的键之间的顺序无关紧要。

不幸的是,文档并没有说明这个细节。它说

使用 QMap,项目总是按键排序

但它没有说明是否/如何对相等的键进行排序。

是否QMap保留对的插入顺序同键或可以以某种方式保存?

qt qmap qmultimap

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

在没有 try/catch 的情况下进行延迟,或者在一个函数中使用它

我想让我的简单小程序尽可能不杂乱。目前我所有的延迟都像

try
{
    TimeUnit.SECONDS.sleep(1);
}
catch(InterruptedException e)
{
}
Run Code Online (Sandbox Code Playgroud)

但它真的很杂乱。我想要某种功能,例如

try
{
    TimeUnit.SECONDS.sleep(Delay);
}
catch(InterruptedException e)
{
}
Run Code Online (Sandbox Code Playgroud)

然后让它以某种方式被这样调用

delay(3)
Run Code Online (Sandbox Code Playgroud)

或者,只是摆脱try/catch一般的声明。那可能吗?

java delay

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

C++类暴露于时尚中的QML错误TypeError:对象的属性'...'不是函数

我已成功地将C++类暴露给QML.它已在Qt Creator中注册并找到.它的目的是连接到数据库,如下面的代码所示:

#ifndef UESQLDATABASE_H
#define UESQLDATABASE_H

#include <QObject>
#include <QtSql/QSqlDatabase>

class UeSqlDatabase : public QObject
{
    Q_OBJECT

    Q_PROPERTY(bool m_ueConnected READ isConnected WRITE setConnected NOTIFY ueConnectedChanged)

private:
    bool m_ueConneted;

    inline void setConnected(const bool& ueConnected)
        { this->m_ueConneted=ueConnected; }

public:
    explicit UeSqlDatabase(QObject *parent = 0);

    Q_INVOKABLE inline const bool& isConnected() const
        { return this->m_ueConneted; }

    ~UeSqlDatabase();

signals:
    void ueConnectedChanged();

public slots:
    void ueConnectToDatabase (const QString& ueStrHost, const QString& ueStrDatabase,
                              const QString& ueStrUsername, const QString& ueStrPassword);
};

#endif // UESQLDATABASE_H
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试isConnected()从以下QML代码调用方法时

import …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2

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

QAbstractTableModel::insertRows 将新数据附加到内部 QList

我有以下类,它代表数据结构中的记录:

#ifndef UECONNECTEDCLIENTRECORD_H
#define UECONNECTEDCLIENTRECORD_H

#include <QtGlobal>
#include <QObject>
#include <QHostAddress>
#include <QString>

class UeConnectedClientRecord : public QObject
{
    Q_OBJECT

private:
    /**
     * @brief m_ueClientName
     */
    QString m_ueClientName;

    /**
     * @brief m_ueClientAddress
     */
    QHostAddress m_ueClientAddress;

    /**
     * @brief m_ueClientPort
     */
    QString m_ueClientPort;

public:
    /**
     * @brief UeConnectedClientRecord
     * @param parent
     */
    explicit UeConnectedClientRecord(const QString& clientName=QString(),
                                     const QHostAddress& clientAddress=QHostAddress(),
                                     const QString& clientPort=QString());

    /**
     * @brief ueSetClientName
     * @param name
     */
    inline void ueSetClientName(const QString& name)
        { this->m_ueClientName=name; }

    /**
     * @brief …
Run Code Online (Sandbox Code Playgroud)

c++ qt

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

更改其中的JMenuBar和JMenu对象的背景和文本颜色

如何为JMenuBar其中的JMenu对象和对象设置自定义背景颜色?我试过.setBackgroundColor,它不起作用!

java swing look-and-feel jmenubar jmenu

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

将RGB颜色传递给.setBackgroundColor

我有一些颜色,RGB格式编码:121E31 hex.如何将此颜色传递Java的Color

java swing hex colors

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

尝试以编程方式在ListView中居中项目

我想在QML中设置中心项ListView,因此我添加了以下代码ListView:

import QtQuick 2.0
import QtMultimedia 5.5
import QtQuick.Controls 1.3
import QtQuick.Extras 1.4
import QtQuick.Layouts 1.2
import QtQuick.Window 2.2
import QtTest 1.1

Rectangle {
    id: ueKeypad

    width: ueMainColumnLayout.implicitWidth+2*radius
    height: ueMainColumnLayout.implicitHeight+2*radius

    color: "grey"

    radius: 8

    border.color: "#99c6f0"
    border.width: 4

    ColumnLayout {
        id: ueMainColumnLayout

        anchors.fill: parent
        anchors.margins: radius

        spacing: 4

        RowLayout {
            id: ueTextLayout

            Text {
                id: ueStaffLoginText

                text: qsTr("Staff Login")

                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter

                font.family: "Padauk"
                textFormat: Text.RichText

                font.pointSize: 16
                font.bold: true

                color: ueKeypad.border.color

                Layout.fillWidth: true
            } …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qtquickcontrols qtquickextras

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