qt中buttons()与button()的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt中buttons()与button()的区别相关的知识,希望对你有一定的参考价值。

有好几个类中有buttons()和button(),不知道你指的是不是鼠标事件

Qt::MouseButton QMouseEvent::button () const
返回产生事件的按钮,鼠标move事件总是返回 Qt::NoButton

Qt::MouseButtons QMouseEvent::buttons () const

返回产生事件的按钮状态。 按钮状态是Qt::LeftButton, Qt::RightButton, Qt::MidButton的或运算组合。对于鼠标move事件,函数返回当前按下的所有按钮。对于鼠标按下或双击事件,返回导致事件发生的按钮。对于鼠标释放事件,不包含导致事件发生的按钮。追问

就是对事件不是很了解,在click事件中用的是button(),在move事件中用的是buttons(),不能通用吗

追答

假设你的鼠标左键已经按下。
如果移动鼠标,会发生的move事件,button返回Qt::NoButton,buttons返回LeftButton。
再按下了右键,会发生press事件,button返回RightButton,buttons返回LeftButton|RightButton
再移动鼠标,会发生move事件,button返回Qt::NoButton,buttons返回LeftButton|RightButton
再松开左键,会发生Release事件,button返回LeftButton,buttons返回RightButton
也就是说,button返回“那个按钮发生了此事件”,buttons返回"发生事件时哪些按钮还处于按下状态"

参考技术A   qt中对于buttons()与button()的官方介绍如下
  Qt::MouseButton QMouseEvent::button () const
  返回产生事件的按钮;
  Qt::MouseButtons QMouseEvent::buttons () const
  返回产生事件的按钮状态;
  前者是鼠标move事件总是返回 Qt::NoButton,后者函数返回当前按下的所有按钮。
参考技术B The QToolButton class provides a quick-access button to commands or options, usually used inside a QToolBar.
A
tool button is a special button that provides quick-access to specific
commands or options. As opposed to a normal command button, a tool
button usually doesn't show a text label, but shows an icon instead.追问

Qt::MouseButton QMouseEvent::button()和Qt::MouseButtons QMouseEvent::buttons ()

Python QT5 3- 基本操作 - 2.按钮 Button

2. 按钮 Button

>> Buttons包括 6 类

  • Push Button(按钮)
  • Tool Button(工具按钮)-- 图标显示,可以定义popupmenu和toolbuttonstyle(实战未使用)
  • Radio Button(单选框)-- 单选框
  • Check Box(复选框)-- 复选框
  • Command Link Button(命令链接)--  导航按钮(实战未使用)
  • Dialog Button Box(对话框按钮)-- 系统快速按钮部署(实战未使用)

 >> 基本属性

属性说明
QobjectobjectName按钮对像引用名
Qwidgetenabled是否可操作(置灰)
geometry显示形状
sizePolicy尺寸水平 垂直伸展策略
minimumSize最小尺寸
maximumSize最大尺寸
sizeIncementUI变化时尺寸变化
baseSize基本尺寸,默认0
palette姿色设置
font设置字体
cursor鼠标形状
mouseTracking响应鼠标移动事件
tabletTracking平板?
focusPolicy对像获取焦点选项
contextMenuPolicy上下文菜单?
acceptDrops平板?
toolTiptip提示设置
toolTipDurationtip显示时间
statusTip状态栏tip显示
whatsThishelp文本显示?
accesibleName特殊人群使用
accesibleDescription特殊人群使用
layoutDirection布局方向
autoFillBackground对像是否填充背景区域
styleSheet样式设置
locale语言,国家 地区
inputMethodHints输入法设置
QAbstractButtontext设置文本显示,字符前加 & 表示快捷键 alt +
icon设置图标
iconSize图标大小
shortcut设置多字符快捷键
checkable是否可以被选中,true时每次点击转换check 和 uncheck状态
checked是否被选中
autoRepeat是否重复点击,与autorepetdelay,autorepeatinterval组合使用
QPushButtonautoDefault 
default 
flat是否显示边框

>> 声明

self.pbopenfile = QtWidgets.QPushButton(self.frame) #define push button

self.pbopenfile.setMinimumSize(QtCore.QSize(0, 30)) #size
self.pbopenfile.setObjectName("pbopenfile")         #button name 
self.verticalLayout.addWidget(self.pbopenfile)      #layout
self.pbopenfile.setToolTip("Open File...")          #tooltip   

self.pbopenfile.clicked.connect(self.openfile)      #click event

##################
self.pbopenfile.setText(_translate("MainWindow", "Open File")) #show text

>> 事件响应

self.pbopenfile.clicked.connect(self.openfile)      #click event

##set content container
self.twshowfile = QTreeWidget(self.frame_2)         #tree view
self.teshowfile = QtWidgets.QTextEdit(self.frame_2) #test edit

##################################   
def openfile(self):

## 响应按钮并弹出提示框 QMessageBox
    # msg = QMessageBox.information(None, 'Info', 'Information',QMessageBox.Ok|QMessageBox.Cancel|QMessageBox.Yes|QMessageBox.No|QMessageBox.Abort|QMessageBox.Retry|QMessageBox.Ignore,QMessageBox.No)
    #
    # if msg == QMessageBox.Yes:
    #     print("Yes")
    # elif msg == QMessageBox.No:
    #     print("No")

## 打开文件 OpenFileDialog
    # QFileDialog.getOpenFileName(None, 'Open file', './')
    fileName, filetype = QFileDialog.getOpenFileName(None,"Select File","./","Text Files (*.txt;*.jpg)")  # 设置文件扩展名过滤,双分号间隔

    ## 获取打开文件名
    self.leopenfile.setText(fileName)


    # path = QtCore.QStringListModel()
    # pathlist = []

    ## 设置文件显示容器
    self.twshowfile.setColumnCount(1)
    root = QTreeWidgetItem(self.twshowfile)

    ## 打开文件并显示在容器中
    with open(fileName,"r",encoding="utf-8") as fp:
        fprl = fp.readlines()
        fprl.reverse()

        for f in fprl:
            tf = f
            f = f.replace('\\r',"").replace('\\t',"").replace('\\n',"")
            self.teshowfile.append(f)
            # pathlist.append(f)
            if fprl.index(tf) == 0:
                self.teshowfile.append(">>>>>>>>>>>>>>>>>>>>>>>>>>")
                self.twshowfile.setHeaderLabels([f])
                root.setText(0,">>>>>>>>>>>>>>>>>>>>>>>>>>")
            else:
                qitem = QTreeWidgetItem()
                qitem.setText(0,f)
                root.addChild(qitem)

    self.twshowfile.expandAll()

    self.teshowfile.moveCursor(QTextCursor.Start)
    self.teshowfile.setFocus()

参考:第15.14节 PyQt(Python+Qt)入门学习:Designer的Buttons按钮详解_mb5fd86853067b7的技术博客_51CTO博客

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于qt中buttons()与button()的区别的主要内容,如果未能解决你的问题,请参考以下文章

Python QT5 3- 基本操作 - 2.按钮 Button

Qt5 - QML:如何正确连接 ProgressBar 和 Button 以进行长时间运行的循环计算

BUTTON标签和INPUT标签的区别转

Buttons按扭

向WordPress所见即所得编辑器添加按钮

Qt qss一些伪装态,以及margin与padding区别