MouseEvent在带有图像的Qlabel上进行坐标

时间:2019-07-15 08:09:10

标签: c++ qt

所以我不知道如何添加mouseevent(如果我单击带有选择的图像的标签,以在tableWidget上添加鼠标的x,y坐标以及要在图像上绘制的坐标(绿色/红色点)

enter image description here

现在我只能打开带有坐标和图像的ascii文件。我需要您在mouseevent方面的帮助,并在图像上绘制点

void design::on_loadtext1_clicked() {
ui->merge->setText("merge");
QString filename=QFileDialog::getOpenFileName(
            this,
            tr("Open File"),
            "C://",
            "Text File(*.txt)"

         );
QFile file(filename);
if(!file.open(QIODevice::ReadOnly)) { QMessageBox::information(nullptr,"Info",file.errorString());
}
QTextStream in(&file);
  double x = 0.0;
  double y = 0.0;
 // double xn = 532;
  int row=0;
  QString line;
  ui->tableWidget->setRowCount(30);
  ui->tableWidget->setColumnCount(2);

  while(!in.atEnd()) {
      line = in.readLine();
      QStringList s = line.split(" ");
      x = s.at(0).toDouble();
      y = s.at(1).toDouble();
         ui->tableWidget->setItem(row, 0, new TableItem(tr("%1").arg(x)));
         ui->tableWidget->setItem(row, 1, new TableItem(tr("%1").arg(y)));

      row++;
  } }

1 个答案:

答案 0 :(得分:0)

如果要在QLabel上的鼠标单击位置绘制椭圆,此代码将帮助您入门:

首先,如所建议的,子类QLabel

.h 文件

#include <QLabel>
#include <QPainter>
#include <QMouseEvent>

class MyLabel : public QLabel
{
public:
    MyLabel(QWidget* parent=nullptr);
    void mousePressEvent(QMouseEvent * e);

private:
    QPixmap *pix;
};

然后在构造函数中创建pixmap,并在mouseClickEvent上实现绘图:

.cpp 文件

MyLabel::MyLabel(QWidget *parent) :
    QLabel(parent)
{
    pix = new QPixmap(200,200);
    pix->fill(Qt::white);
    setPixmap(*pix);
}

void MyLabel::mousePressEvent(QMouseEvent *e)
{
    int xPos, yPos;
    if(e->button() == Qt::LeftButton)
    {
        xPos = e->pos().x();
        yPos = e->pos().y();
    }

    QPainter painter(pix);
    painter.setPen(Qt::black);
    painter.drawEllipse(xPos, yPos, 3, 3);

    setPixmap(*pix);

    QLabel::mousePressEvent(e);
}

然后仅在MyLabel中创建MainWindow的实例:

label = new MyLabel(this);
label->setGeometry(0,0,200,200);

不要忘记mainwindow.h中的声明:

MyLabel *label;

希望这会有所帮助。