QT 鼠标单击提取鼠标位置(整个屏幕切割分块,创建QStandardItemModel 画表格)

QT 鼠标单击提取鼠标位置

1.还是在之前的MianWindow上写的

在这里插入图片描述
这里我的按钮的位置是屏幕下120的位置

2.mainwindow.h文件:


#include <QMouseEvent>

public:
    //构造函数
    explicit MainWindow(QWidget *parent = 0);
    //析构函数
    ~MainWindow();
    //设定虚函数
    virtual void mouseReleaseEvent(QMouseEvent *event); //鼠标事件
    //变量
    int NUM_HH;     //窗口坐标


3.对应点mainwindow.cpp

文件:

/*
 * 2.鼠标单击按钮 显示窗口
**/
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
   int wd,hi,x,y;
   if(event->button() == Qt::LeftButton){
       wd = this->geometry().width();   //获取当前界面宽度并赋值
       hi = this->geometry().height(); //获取当前页面高度并赋值

       x = event->pos().x();           //鼠标所在X位置
       y = event->pos().y();            //鼠标所在Y位置
       NUM_HH =  (x/(wd/8))+(((y-120)/((hi-120)/8))*8);
        qDebug() << NUM_HH ;
       //在按钮所在的窗口区域触发
        if(y>120){
            //弹出新的窗口
            MeasResult result;
            result.exec();
       }
   }
}

数学逻辑:
是在窗口下的120位置开始计算 所以先减去120
因为我的界面是8*8的 所以以上是用的8

4.以上点击后会跳转至MeasResult

4.1 mainresult.h 文件内:
#ifndef MEASRESULT_H
#define MEASRESULT_H

#include <QDialog>
#include <QTableView>
#include <QStandardItemModel>
#include "mainwindow.h"

namespace Ui {
class MeasResult;
}

class MeasResult : public QDialog
{
    Q_OBJECT

public:
    explicit MeasResult(QWidget *parent = 0);
    ~MeasResult();

private slots:


private:
    Ui::MeasResult *ui;


};

#endif // MEASRESULT_H
4.2 对应的measresult.cpp文件:
#include "measresult.h"
#include "ui_measresult.h"

#include <QStandardItem>
#include <QHeaderView>
#include <QStandardItemModel>

extern MainWindow *mainWin;
MeasResult::MeasResult(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MeasResult)
{
    ui->setupUi(this);
    //提供了用于存储自定义数据的通用模型
        QStandardItemModel *model = new QStandardItemModel(0,8);
//        model->setHeaderData(0,Qt::Horizontal,tr("column 信息  底下被隐藏  所以不做设定"))
        //插入数据
            //model->item(4,8);
            model->insertRows(0,1); //插入第一行
            model->setData(model->index(0,0), tr("板  序")); 
            model->setData(model->index(0,1), tr("产品型号")); 
            model->setData(model->index(0,2), tr("电压上限"));
            model->setData(model->index(0,3), tr("电压下限"));
            model->setData(model->index(0,4), tr("电流上限"));
            model->setData(model->index(0,5), tr("电流下限"));
            model->setData(model->index(0,6), tr("结果判定"));
            model->setData(model->index(0,7), tr("通 道 数"));
            
            model->insertRows(1,1); //插入第二行
            model->setData(model->index(1,0), mainWin->NUM_HH+1); 
            model->setData(model->index(1,1), mainWin->condMeasure.product_model);
            model->setData(model->index(1,2), mainWin->condMeasure.u_li.up);
            model->setData(model->index(1,3), mainWin->condMeasure.u_li.down);
            model->setData(model->index(1,4), mainWin->condMeasure.i_li.up);
            model->setData(model->index(1,5), mainWin->condMeasure.i_li.down);
            model->setData(model->index(1,6), mainWin->paraMeasure[mainWin->NUM_HH].ok);
            //根据返回值  设定对应的背景颜色
            if((mainWin->paraMeasure[mainWin->NUM_HH].ok) == 0){
                //0  ng
                 model->item(1,6)->setBackground(Qt::red);
            }else if((mainWin->paraMeasure[mainWin->NUM_HH].ok) == 1){
                //1 ok
                model->item(1,6)->setBackground(Qt::green);
            }else{
                //2 none
                model->item(1,6)->setBackground(Qt::gray);
            }
            model->setData(model->index(1,7), mainWin->condMeasure.channel_num);
            
            model->insertRows(2,1); //插入第三行
            model->setData(model->index(2,0), tr("电压一结果"));
            model->setData(model->index(2,1), tr("电压一判定"));
            model->setData(model->index(2,2), tr("电流一结果"));
            model->setData(model->index(2,3), tr("电流一判定"));
            model->setData(model->index(2,4), tr("电压二结果"));
            model->setData(model->index(2,5), tr("电压二判定"));
            model->setData(model->index(2,6), tr("电流二结果"));
            model->setData(model->index(2,7), tr("电流二判定"));
            model->insertRows(3,1); //插入第四行
            model->setData(model->index(3,0), QString::number(mainWin->paraMeasure[mainWin->NUM_HH].V1,'f',3));
            model->setData(model->index(3,1), mainWin->paraMeasure[mainWin->NUM_HH].pV1);
            model->setData(model->index(3,2), QString::number(mainWin->paraMeasure[mainWin->NUM_HH].I1,'f',3));
            model->setData(model->index(3,3), mainWin->paraMeasure[mainWin->NUM_HH].pI1);
            model->setData(model->index(3,4), QString::number(mainWin->paraMeasure[mainWin->NUM_HH].V2,'f',3));
            model->setData(model->index(3,5), mainWin->paraMeasure[mainWin->NUM_HH].pV2);
            model->setData(model->index(3,6), QString::number(mainWin->paraMeasure[mainWin->NUM_HH].I2,'f',3));
            model->setData(model->index(3,7), mainWin->paraMeasure[mainWin->NUM_HH].pI2);

        ui->tableView->horizontalHeader()->setVisible(false);//显示或隐藏表头
        ui->tableView->verticalHeader()->setVisible(false);//显示或隐藏序列行
        ui->tableView->setAutoScroll(false);//自动滚动条
        ui->tableView->resizeColumnsToContents(); //根据内容调整大小
        ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//根据容器调整大小
        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//只读
        ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems); //设置选中模式为单元格
        ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection); //设置选中单行
        ui->tableView->setModel(model); //使用
}

MeasResult::~MeasResult()
{
    delete ui;
}

5.看一下效果

在这里插入图片描述

以上根据位置 显示出了序号 并且根据值 调整了背景颜色 做提醒

6.谢谢观看 一起学习 [email protected]

猜你喜欢

转载自blog.csdn.net/qq_45646951/article/details/106799659