有什么方法可以改变 QML 中的光标形状吗?我正在使用 Qt 4.7 和 Python,所以我不能使用 Qt Quick 2,并且在 Qt Quick 中没有光标形状选项。
问问题
1865 次
2 回答
4
是的,有一种方法,虽然不是我所知道的 QML 内部,而是在程序的 c++ 部分,main.cpp 文件的示例:
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/main.qml"));
viewer.showExpanded();
//changing cursor
viewer.setCursor(QPixmap(":/peach.png").scaledToWidth(20));
或者,您可以将光标更改为类似这样的 qt 光标形状(不是自定义光标,但您可以尝试更改此魔术位),将这些行添加到main.cpp
#include "cursorshapearea.h"
qmlRegisterType<QsltCursorShapeArea>("Cursor", 1, 0, "CursorShapeArea");
光标形状区域.cpp:
#include "cursorshapearea.h"
QsltCursorShapeArea::QsltCursorShapeArea(QDeclarativeItem *parent) :
QDeclarativeItem(parent),
m_currentShape(-1)
{
}
Qt::CursorShape QsltCursorShapeArea::cursorShape() const
{
return cursor().shape();
}
void QsltCursorShapeArea::setCursorShape(Qt::CursorShape cursorShape)
{
if (m_currentShape == (int) cursorShape)
return;
setCursor(cursorShape);
emit cursorShapeChanged();
m_currentShape = cursorShape;
}
光标形状区域.h:
#ifndef CURSORSHAPEAREA_H
#define CURSORSHAPEAREA_H
#include <QDeclarativeItem>
class QsltCursorShapeArea : public QDeclarativeItem
{
Q_OBJECT
Q_PROPERTY(Qt::CursorShape cursorShape READ cursorShape WRITE setCursorShape NOTIFY cursorShapeChanged)
public:
explicit QsltCursorShapeArea(QDeclarativeItem *parent = 0);
Qt::CursorShape cursorShape() const;
Q_INVOKABLE void setCursorShape(Qt::CursorShape cursorShape);
private:
int m_currentShape;
signals:
void cursorShapeChanged();
};
#endif // CURSORSHAPEAREA_H
在您的 QML 文件中:
import Cursor 1.0
并将 CursorShapeArea 添加到 Rectangle 例如:
CursorShapeArea {
anchors.fill: parent
anchors.margins: 50
cursorShape: Qt.OpenHandCursor
}
于 2013-06-20T11:05:43.750 回答
0
一个例子:
主要.py:
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtDeclarative import *
class CursorArea (QDeclarativeItem):
def __init__(self, parent = None):
QDeclarativeItem.__init__(self, parent)
self._cursors = Qt.CursorShape.ArrowCursor
self._cursorsPix = "None"
self._cursorsPixUrl = []
self.dictPix = {"lapizAzul": QCursor(QPixmap("lapiz1.png"),1,32),
"lapizVerde": QCursor(QPixmap("lapiz1.png"),1,32),
"lapizCorona": QCursor(QPixmap("lapiz1.png"),1,32),
}
def getCursors(self):
return self_cursors
def setCursors(self,value):
self._cursors = value
self.setCursor(value)
cursors = Property(Qt.CursorShape, getCursors, setCursors)
def getCursorsPix(self):
return self._cursorsPix
def setCursorsPix(self, value):
print (value)
pixmap = self.buscarPixmap(value)
self.setCursor(pixmap)
cursorsPix = Property("QString", getCursorsPix, setCursorsPix)
def buscarPixmap(self, pix):
if (pix in self.dictPix) == True:
pixmap = self.dictPix[pix]
else:
pixmap = Qt.CursorShape.WhatsThisCursor
return pixmap
def getCursorsPixUrl(self):
return self._cursorsPixUrl
def setCursorsPixUrl(self, lista):
print (lista)
self.setCursor(QCursor(QPixmap(lista[0]),lista[1],lista[2]))
cursorsPixUrl = Property("QVariantList", getCursorsPixUrl, setCursorsPixUrl)
if __name__ == '__main__':
app = QApplication(sys.argv)
qmlRegisterType(CursorArea, "Charts", 1, 0, "CursorArea");
view = QDeclarativeView()
view.setSource(QUrl.fromLocalFile('app.qml'))
view.show()
sys.exit(app.exec_())
应用程序.qml:
import Charts 1.0
import QtQuick 1.0
Item {
width: 300; height: 200
CursorArea{
id:ca
anchors.fill: parent
//cursors:Qt.PointingHandCursor
//cursorsPix: "lapizAzul"
cursorsPixUrl: ["cursorEstrella.png",1,32]
}
}
于 2016-03-28T20:09:35.000 回答