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.看一下效果
以上根据位置 显示出了序号 并且根据值 调整了背景颜色 做提醒