python 的qlabel的mousepressevent怎么用

python 的qlabel的mousepressevent怎么用,第1张

做Qt开发的会知道QLineEdit,QLabel是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEdit或者QLabel的一些方法去实现没有的方法,比如clicked事件.本人就以QLineEdit QLabel添加clicked事件来说明.

Qt里面有个关键字emit,这个关键字意思就是触发一个信号,具体emit更详细的使用方法,可以百度,本文不做具体详解,只需知道emit是触发一个信号的方法即可.

下面我们就开始讲如何给QLineEdit添加clicked()事件.首先我们需要一个类,继承QLineEdit,我们定义为:mylineedit.那么分析下clicked()事件,这喊灶个事件是因为我们鼠标单击点击了下lineedit,然后触发的,那么正好,我们想到了在Qt有个mousePressEvent事件,于是我们可以重写mousePressEvent事件,然后触发自定义一个clicked()的信号,这样就可以实现点击lineedit就会发送一个clicked()的信号,代码如下:

mylineedit.h

?

123456789101112131415161718192021222324#ifndef MYLINEEDIT_H#define MYLINEEDIT_H #include <QLineEdit>#include <QMouseEvent> class mylineedit : public QLineEdit{    Q_OBJECTpublic:    explicit mylineedit(QWidget *parent = 0)protected:    //重写mousePressEvent事件    virtual void mousePressEvent(QMouseEvent *event) signals:    //自定义clicked()信号,在mousePressEvent事件发生时触发    void clicked() public slots: } #endif // MYLINEEDIT_H

mylineedit.cpp

?

1234567891011121314151617#include "mylineedit.h" mylineedit::mylineedit(QWidget *parent) :    QLineEdit(parent){} //重写mousePressEvent事件,检测事件类型是不是点击了鼠标左键void mylineedit::mousePressEvent(QMouseEvent *event) {    //如果单击了就触发clicked信号    if (event->button() == Qt::LeftButton) {        //触发clicked信号        emit clicked()    }    //将该事件传给父类处理    QLineEdit::mousePressEvent(event)}

通过以上代码,我们的lineedit已经具有了发出clicked信号的能力,那么我们就可以把他做为一个组件放到QWidget或者其他容器里面,在QWidget类里面我们提供一个处理lineedit clicked信号的槽函数,然后在QWidget构造函数里面绑定lineedit clicked信号跟对应的处理函数,这样就可以达到我们想要的效果.

widget.h

?

123456789101112131415161718192021222324252627#ifndef WIDGET_H#define WIDGET_H #include <QWidget> namespace Ui {    class Widget} class Widget : public QWidget{    Q_OBJECT public:    explicit Widget(QWidget *parent = 0)    ~Widget() private: 郑陪扮   Ui::Widget *ui private slots:    //定乱返义槽函数处理lineedit clicked    void handlelineeditclicked()    void handlelabelclicked()} #endif // WIDGET_H

widget.cpp

?

1234567891011121314151617181920212223242526#include "widget.h"#include "ui_widget.h" Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this)    //在widget的构造函数绑定lineedit的clicked信号    connect(ui->lineEdit, SIGNAL(clicked()), this, SLOT(handlelineeditclicked()))    connect(ui->label, SIGNAL(clicked()), this, SLOT(handlelabelclicked()))} Widget::~Widget(){    delete ui} void Widget::handlelineeditclicked() {    //在处理lineedit clicked函数里我们将lineedit背景色变为红色    ui->lineEdit->setStyleSheet("background-color:red")} void Widget::handlelabelclicked() {    ui->label->setStyleSheet("background-color:green")}

这样,我们的lineedit便具有了clicked的功能了.

main.cpp

?

1234567891011#include <QtGui/QApplication>#include "widget.h" int main(int argc, char *argv[]){    QApplication a(argc, argv)    Widget w    w.show()     return a.exec()}

运行之后的效果就是点击lineedit,然后lineedit背景变为红色.同理,QLabel增加clicked功能也可以实现了.效果如下:

通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就塌蚂橘可以获得鼠标单击到物亏的单元格指针,获得到了当前的位置信息团团

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, SLOT( getItem(QTreeWidgetItem*,int)) )

通过 QTreeWIdgetltem 你可以获得到你想要的全部数据

重载QTableView从QAbstractItemView继承来的静滚穗态函大裂卜数就kyle

按你的源卖要去i,下面2个都可以

void activated ( const QModelIndex &index )

void clicked ( const QModelIndex &index )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11992335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存