操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    Win10系統鼠標不能正常拖動文件或文件夾圖標怎么辦?有用戶在使用鼠標拖動文件圖標是發現無法拖動,該如何解決?下面給大家分析常見原因及其解決方法。

    原因一:系統進程未完全退出

    解決辦法:多按兩次ESC鍵試試看。

    原因二:鼠標硬件故障

    解決辦法:檢查下鼠標接口(PS/2類型,注意先關閉計算機),如果故障依舊,看樣子您的電腦需要換個新鼠標了!

    原因三:組策略禁止拖放設置錯誤

    解決辦法:

    第一步、按下“Win+R(不含引號,下同)”,再出現的運行命令中輸入“gpedit.msc”后回車。

    第二步、在本地組策略編輯器界面,依次展開左側面板用戶配置-〉管理模板-〉windows組件-〉任務計劃程序,點擊選中“任務計劃程序”,在右側窗口找到并蛋黃及打開“禁止拖放”。

    第三步、在禁止拖放界面,點擊選擇“未配置”,或者“已禁用”后,點擊確定后,重啟電腦即可。

    原因四:桌面圖標被鎖定

    解決辦法:這種情況只發生在桌面圖標上,應該是桌面圖標被設置成了自動排列,桌面空白處右鍵,菜單中取消“自動排列圖標”即可。

    在GUI應用開發中,使用拖放技術在不同控件或者應用之間進行數據交換,是一種常見的交互功能。使用該技術的典型示例就是在Windows系統的資源管理器中移動或復制文件。在資源管理里,如果要將文件移動到另一個目錄,只需用鼠標左鍵單擊文件圖標并按住不放,將文件拖動到目標目錄,然后再釋放鼠標按鈕,則可以完成移動或者復制操作。

    一個典型的拖放操作過程,涉及到三個方面,從某個控件或者應用拖動某個對象(文件、一段文本信息等等),數據傳遞,放置拖動對象到目標窗口。

    拖動

    1. 在mousePressEvent( )中,記錄鼠標按下時的位置;
    2. 在mouseMoveEvent()中,計算鼠標移動的距離,可用來防止無意的拖動。QApplication的下列靜態方法可用來控制延遲量:
      1. setstartDragDistance (Distance): 拖動開始的最小移動量;
      2. startDragDistance(): 返回拖動開始的最小移動量;
      3. setstartDragTime (Time):拖動開始的按壓毫秒數;
      4. startDragTime () : 返回拖動開始的按壓毫秒數。
    3. 鼠標移動超過最小移動值或按壓鼠標超過最小毫秒數,拖動操作開始。此時,創建一個QDrag對象,調用exce()方法進行相關操作。

    QDrag有以下常用方法:

    • exec( ): 開始拖放操作,返回一個代表放置操作的枚舉值。
    • setMimeData (QMimeData qmd): 設置拖放中傳輸的數據, 參數為QMimeData類型。傳輸文本的例子:
             data=QMimeData ()
             data.setText ("Drag text")
             drag=QDrag (self)
             drag.setMimeData (data)
    • mimeData (): 返回拖放過程中傳輸數據的QMimeData 對象。
    • setPixmap(QPixmap qpix): 設定拖放過程鼠標顯示的圖像。如:
             drag.setPixmap (QPixmap ("drag.png"))
    • pixmap(): 返回拖放過程中鼠標顯示圖像的QPixmap對象。
    • setHotSpot (QPoint pt): 設置圖像的熱點位置。如:
             drag.setHotSpot (QPoint (20, 20))
    • hotSpot(): 返回熱點位置的QPoint對象。
    • setDragCursor(QPixmap pix, Qt.DropAction dact): 設置拖放的鼠標形狀。第一個參數為鼠標形狀的QPixmap對象;第二參數為相關操作的枚舉值,只能是 CopyAction, MoveAction 或LinkAction。如:
             drag.setDragCursor(QPixmap ("move_cursor.png"), Qt.MoveAction)
    • dragCursor(Qt.DropAction dact): 返回dact操作的鼠標形狀的QPixmap對象。
    • source(): 返回源控件的引用。
    • target(): 返回目標控件的引用。如果拖放的目標對象為另一應用,返回值為None。
    • supportedActions(): 返回當前有效操作的組合值。
    • defaultAction(): 返回缺省的操作。

    QDrag的信號:

    • actionChanged (Qt.DropAction dact) - 當拖放的行為被改變時,發射該信號。
    • targetchanged (QWidget obj) - 當目標控件被改變時,將會發射該信號。

    數據傳遞

    通過將QMineData對象作為參數調用QDrag的setMimeData()函數來實現拖放過程中的MIME類型的數據傳遞。

    創建QMimeData方法:

             data=QMimeData()

    QMimeData類有以下方法:

    • setText(text): 設置文本數據(MIME型文本/文本格式)。如:
             data.setText('drag text ')
    • text( ): 返回文本數據。
    • hasText(): 如果對象包含文本數據,則返回True,否則返回False。
    • setHtml(HTML-text) - 以HTML格式設置文本數據(MIME型文本 / html格式)。如:
             data.setHtml('<b> drag HTML text</ b>')
    • html( ): 返回HTML格式的文本數據。
    • hasHtml( ): 如果對象包含HTML格式的文本數據,則返回True,否則為False。
    • setUrls( QList url): 設置地址列表,參數為QUrl類的列表。如:
             data.setUrls ([QUrl ("http://www.google.com/")])
    • urls (): 返回地址列表。如:
             url=e.mimeData (). urls () [0] .toString ()
    • hasUrls (): 如果對象包Url地址,則返回True,否則為False。
    • setlmageData(QVarinat img): 設置圖像數據,可以是QImage或QPixmap實例。如:
             data.setlmageData (Qlmage("pixmap.png"))
             data.setlmageData (QPixmap("pixmap.png"))
    • imageData( ): 返回圖像對象。
    • haslmage( ): 如果對象包含圖像數據,則返回True,否則為False。
    • setData(str mimetype,QByteData data) 設置任意類型的MIME類型數據;參數1為字符串類型,指定MIME類型;參數2為QByteData類實例。該方法可以用MIME不同類型,多次調用。如:
             data.setData("text/plain",QByteArray (bytes ("Data", "utf-8")))
    • data(str mimetype): 返回mimetype類型的QByteData數據對象。
    • hasFormat(str mimetype): 如果對象包含mimetype類型數據,則返回True,否則為False。
    • formats(): 返回包括的mimetype類型列表。
    • removeFormat (str mimetype): 刪除mimetype類型的數據。
    • clear(): 刪除所有數據。

    如果要實現特殊類型數據的拖放,需要創建一個QMimeData子類,并重載retrieveData() 和 formats()方法。

    放置

    在處理拖放對象之前,必須告訴系統該組件可以處理這些事件。 為此,要在控件的構造函數中,調用繼承自QWidget類的setAcceptDrops方法,參數值為True。如:

             self.setAcceptDrops(True)

    拖放對象的過程執行如下:

    1. 在控件的dragEnterEvent()方法中,檢查拖動的MIME類型數據。如果該控件能處理此類型數據,則調用事件對象的acceptProposedAction( )方法。如果要變更操作,則將新事件傳遞給事件對象的setDropAction( )方法,然后調用accept( )方法,而不是調用acceptProposedAction( )方法。
    2. 如果要限制控件的特定區域才能放置操作,必須在dragMoveEvent( )方法中處理。即當拖放進入到特定的區域,調用accept( QRect rect)方法,參數rect為特定區域的QRect對象。
    3. 在控件的dropEvent(self, event)方法中,完成相關操作。

    在QWidget類中的下列方法可以處理在拖放過程中所發生的事件:

    • dragEnterEvent (self,event): 當拖動進入到控件區域時調用。通過event參數, 可取得QDragEnterEvent實例。
    • dragLeaveEvent(self,event): 當拖動離開控件區域時調用。通過event參數, 可取得QDragLeaveEvent實例。
    • dragMoveEvent (self, event):當拖動在控件區域移動時調用。通過event參數, 可取得QDragMoveEvent實例。
    • dropEvent (self, event): 當拖動在控件區域放開時調用。通過event參數, 可取得QDropEvent實例。

    QDropEvent類有下列方法:

    • mimeData(): 返回含有所傳輸數據和MIME類型信息的QMimeData類的實例。
    • pos(): 返回QPoint類的實例,為拖放對象放置的整數坐標。
    • posF():返回QPointF類的實例,為拖放對象放置的浮點坐標。
    • possibleAction(): 返回拖放可能的操作組合,如:
             if event.possibleActions () & Qt.MoveAction:
                       print ("Move Action")
             if event.possibleActions () &Qt.CopyAction:
                       print ("Copy Action")
    • proposedAction(): 返回默認的放置操作;
    • acceptProposedAction():表示已準備好接受傳輸的數據和由proposalAction()返回的默認操作。該方法(或者accept()方法)必須在dragEnterEvent()中調用,否則,dropEvent()不會被調用。
    • setDropAction(action): 允許在放置時指定為action. 做了此設置后,必須調用accept( )方法, 而不是acceptProposedAction( )方法。
    • dropAction(): 返回放置時進行的操作。如果用setDropAction( )進行了更改,可能與proposedAction ()的返回值不一致。
    • keyboardModifiers(): 用于判斷按下了哪些修飾鍵 (, , , 等)。
    • mouseButtons(): 用于判斷在拖放過程中按下的鼠標鍵。
    • source( ): 如果拖放是從另一個應用程序來的,返回為None;否則,返回對拖放源控件的引用。

    QDragMoveEvent類的方法有:

    • accept(QRect rect): 表明允許后續的移動操作。 rect用來指定可接受拖放操作的區域。
    • ignore(QRect rect): 表明不允許后續的移動操作。 rect用來指定不接受拖放操作的區域。
    • answerRect (): 返回可接受拖放操作區域的QRect對象。

    Qt中的有些控件,如單行文本控件,已有拖放功能。

    拖放測試

    測試代碼中MyLabel類繼承自QLabel,它可以接收QLineEdit里面選中的文字拖入并顯示。完整代碼如下:

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import QFont
    from PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit, QFrame, QLabel, QVBoxLayout)
     
    class MyLabel(QLabel):
        def __init__(self, title, parent = None):
            super(MyLabel, self).__init__(title, parent)
            #接受拖入操作
            self.setAcceptDrops(True)
            #加邊框
            self.setFrameShape(QFrame.Box)
            self.setLineWidth(1)
            #文字居中顯示
            self.setAlignment(Qt.AlignCenter)
            #字體加大顯示
            self.setFont(QFont(self.font().family(), 24))
        
        #拖動進入事件    
        def dragEnterEvent(self, event):
            if(event.mimeData().hasFormat('text/plain')):
                event.accept()
            else:
                event.ignore()
        
        #放置事件
        def dropEvent(self, event):
            self.setText(event.mimeData().text())
     
    class DemoDragDropEvent(QWidget):
        def __init__(self, parent=None):
            super(DemoDragDropEvent, self).__init__(parent)   
            
             # 設置窗口標題
            self.setWindowTitle('實戰PyQt5: 拖放操作演示')      
            # 設置窗口大小
            self.resize(400, 160)
          
            self.initUi()
            
        def initUi(self):
            mainLayout = QVBoxLayout()
            
            editBox = QLineEdit('拖動選中的文字')
            editBox.setDragEnabled(True)
            
            textBox = MyLabel('文字拖放到這里')
            
            mainLayout.addWidget(editBox)
            mainLayout.addWidget(textBox)
            self.setLayout(mainLayout)
        
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = DemoDragDropEvent()
        window.show()
        sys.exit(app.exec())

    運行效果如下圖所示:

    拖放技術演示

    本文知識點

    • 拖放技術的實現過程。
    • 對一個控件添加拖放功能支持。
    • 設置QLabel的邊框,字體和文字對齊方式。

    喜歡本文內容就關注, 收藏,點贊,評論和轉發。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有