Linux-QT5.9学习笔记——事件

自定义控件封装:

添加新文件-》qt-》qt面类-》。。。

在主界面 拖拽一个widget,右键提升,添加基类,名称要一样,提升完成后ok。

    connect(ui->slider,&QSlider::valueChanged,ui->spin,&QSpinBox::setValue);  关联
    void (QSpinBox:: * valuep)(int) = &QSpinBox::valueChanged;                         指定多定义函数中的地址
    connect(ui->spin,valuep,ui->slider,&QSlider::setValue);                                    关联

事件:

声明类,重写虚方法,自带组件需要提升为声明类

    void enterEvent(QEvent *event);                        鼠标进入
    void leaveEvent(QEvent *event);                        鼠标离开
    void mouseMoveEvent(QMouseEvent *ev);       鼠标按下移动
    void mousePressEvent(QMouseEvent *ev);       鼠标按下
    void mouseReleaseEvent(QMouseEvent *ev);   鼠标松开

    void timerEvent(QTimerEvent *event);                时间定时器   需要startTimer(1000)启动定时器

        if( ev->button() == Qt::LeftButton)                   如果点击鼠标左键
    qDebug()<< QString("Mouse value is:  x--%1--y%2--").arg(ev->x()).arg(ev->y()) <<endl;    打印鼠标xy坐标

     if( ev->buttons() & Qt::LeftButton)                      判断持续状态中  是否点击左键

     this->setMouseTracking(true);                            设置鼠标追踪 不需要点击也能探测到

    QTimer * timer = new QTimer(this);                     时间定时器类
    timer->start(500);                                                 设置定时时间,开启时钟
    connect(timer,&QTimer::timeout,[=](){                  连接定时内容
     ui->time->setText("time:"+QString::number(num++));
    });

事件分发器:执行在事件之前

bool event(QEvent *e);                                            事件分发器

bool LableEvent::event(QEvent *e){                        实现分发器
    if(e->type() == QEvent::MouseButtonPress){      如果鼠标按下会拦截信息
        QMouseEvent *ev = static_cast<QMouseEvent *>(e);               指针强转 static_cast<>
        qDebug()<<"mouse down"<< QString(":x--%1--y--%2").arg(ev->x()).arg(ev->y());
        return true;
    }
    return QLabel::event(e);                                       向其父类继续分发;
}

事件过滤器:执行在分发之前(两步)

1.给对应的组件安装事件过滤器     ui->label->installEventFilter(this);

2.重写eventFilter

   2.1   声明      bool eventFilter(QObject *watched, QEvent *event);

   2.2   实现      bool MainWindow::eventFilter(QObject *watched, QEvent *event){
                        if(ui->label == watched){
                              if(event->type() == QEvent::MouseButtonPress){
                                       QMouseEvent * ev = static_cast<QMouseEvent *>(event);
                                      qDebug()<<"dianji:"<<QString("x--%1--y--%2").arg(ev->x()).arg(ev->y());
                                      return true;
                                   }
                              }
                              return QWidget::eventFilter(watched,event);
                          }

绘图事件:

void paintEvent(QPaintEvent *event);                                  添加绘图事件

    QPainter painter(this);                                                       创建画家
    QPen pen(QColor(255,0,0));                                            创建画笔
    pen.setWidth(5);                                                               设置笔粗
    pen.setStyle(Qt::DotLine);                                                设置风格
    painter.setPen(pen);                                                         画家拿起画笔
    painter.drawLine(QPoint(0,0),QPoint(400,400));              画线
    painter.drawEllipse(QPoint(300,300),100,100);                画椭圆
    QBrush brush(Qt::green);                                                 创建画刷
    brush.setStyle(Qt::Dense6Pattern);                                  设置画刷风格
    painter.setBrush(brush);                                                    画家拿起画刷
    painter.drawRect(QRect(200,100,100,50));                      画四角形
    painter.drawText(QRect(350,100,100,100),"wossdfgsfsdfaf,dfghihaoren!"); 画文字

    QPainter painter(this);                                                       创建画家
    painter.drawEllipse(QPoint(200,200),100,100);                 画圆
    painter.setRenderHint(QPainter::Antialiasing);                  设置抗锯齿能力
    painter.save();                                                                     保存画家当前状态
    painter.translate(QPoint(200,0));                                        将画家向右移动
    painter.drawEllipse(QPoint(200,200),100,100);                 画圆
    painter.restore();                                                                 画家状态恢复

    painter.drawPixmap(0,0,postionx,this->height(),QPixmap(":/textures/yaowei.jpg"));         绘制图片

     update();   更新绘图事件;

绘图设备

QPixmap  正常图片,QBitmap 灰度图,QImage 为像素点做优化  QPicture 记录和重现QPainter指令

    QPixmap pix(300,300);                                                  创建白纸 

    pix.fill(Qt::white);                                                            填充白纸
    QPainter painter(&pix);                                                  创建画家到指定白纸
    painter.setPen(QPen(QColor(255,0,0),10));                  设置画笔
    painter.drawEllipse(QPoint(150,150),100,100);             画圆
    pix.save("../pix.png");                                                     保存目录


    QImage image(300,300,QImage::Format_ARGB32);   创建一个QImage 格式为argb32
    image.fill(Qt::white);                                                       图片填充色为白色
    QPainter painter(&image);                                              设置画家在这个画布上绘制
    painter.setPen(QPen(Qt::red,0));                                   设置画笔
    painter.drawEllipse(QPoint(150,150),100,100);             画圆
    image.save("../image.png");                                           将图片保存到本地

    QPicture pic;                                                                  创建QPicture
    QPainter painter;                                                           创建画家
    painter.begin(&pic);                                                        图片开始保护绘制
    painter.setPen(QPen(Qt::red,5));                                   设置画笔
    painter.drawEllipse(QPoint(150,150),100,100);             画圆
    painter.end();                                                                 图片完成绘制保护
    pic.save("../image.wd");                                                 图片保存到本地

    QPicture pic;                                                                  创建图片
    pic.load("../image.wd");                                                  加载命令文本
    QPainter painter(this);                                                   创建画师
    painter.drawPicture(0,0,pic);                                          画图(执行文件中的指令)

读写文件:

        QString s = QFileDialog::getOpenFileName(this,"ReadFile","/home/wandong","(*.txt)");  //打开资源管理器对话框
        if(s != ""){
            QTextCodec * cde = QTextCodec::codecForName("gbk");               设置文件格式
            QFile file(s) ;                                                                                      创建文件
            file.open(QIODevice::ReadOnly);                                                      只读方式打开文件
            QByteArray arr;                                                                                  声明字符串数数组
//            arr = file.readAll();                                                                            读取文件
//            ui->textEdit->setText(cde->toUnicode(arr));                                    指定格式设置文字

            while (!file.atEnd()) {                                                                           按行读取
                 arr += file.readLine();
            }
            ui->textEdit->setText(arr);                                                                  设置文件
            file.close();                                                                                          关闭文件
            file.open(QIODevice::Append);                                                          追加方式打开文件
            file.write("shdfsjadlf;asjdkfaaaaaaaaaa");                                          文件写入
            file.close();                                                                                          文件关闭

        QFileInfo info(s);                                                                                    文件信息                                                       
        data +=("info.fileName:"+ info.fileName()+"\n");                                     文件名字
        data +=( "info.filePath:"+ info.filePath()+"\n");                                         文件路径
        data +=("info.size:" +QString::number(info.size())+"\n");                        文件的大小
        data +=("info.suffix:"+ info.suffix()+"\n");                                                 文件的后缀名
        data +=("info.created:"+info.created().toString("yyyy/MM/dd hh:mm:ss")+"\n" );                文件的创建日期
        data +=("info.lastModified:"+info.lastModified().toString("yyyy/MM/dd hh:mm:ss")+"\n" );  文件的最后修改时间  时间格式

创建目录

QDir *folder = new QDir;                                                声明一个目录

bool exist = folder->exists("D:/NewFolder");                  判断路径是否存在

bool ok = folder->mkdir("D:/NewFolder");                      创建文件夹


版权声明:本文为qq_25490573原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。