2013-06-20 63 views
1

有什麼方法可以在QML中更改光標形狀嗎?我使用的是Qt 4.7和Python,所以我不能使用Qt Quick 2,而在Qt Quick中沒有光標形狀選項。QML中的光標形狀

+0

@Downvoter請不要downvote沒有在某人的第一個問題的解釋 - 是不鼓勵他們回來。 – cmannett85

+0

我已經明白了一切,別擔心 –

回答

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"); 

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; 
} 

cursorshapearea.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到矩形例如:

CursorShapeArea { 
    anchors.fill: parent 
    anchors.margins: 50 
    cursorShape: Qt.OpenHandCursor 
    } 
0

一個例子:

main.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_()) 

app.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] 
    } 
}