Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MousePresseEvent()出现一些错误 #包括“mainwindow.h” #包括“ui_main window.h” #包括 #包括 #包括“my_qlabel.h” #包括 int-px; int-py; 主窗口::主窗口(QWidget*父窗口): QMainWindow(父级), 用户界面(新用户界面::主窗口) { 用户界面->设置用户界面(此); tmrTimer=新的QTimer(本); 连接(tmrTimer,信号(timeout()),此,插槽(显示位置fMouse()); tmrTimer->start(20); } MainWindow::~MainWindow() { 删除用户界面; } void主窗口::显示位置fmouse() { 用户界面->明文编辑->追加明文(QString(“x,y=)+QString::number(px)+QString::number(py)); } void my_qlabel::MousePresseEvent(QMouseEvent*事件) { 如果(事件->按钮()==Qt::RightButton){ px=事件->x(); py=事件->y(); } }_Qt - Fatal编程技术网

MousePresseEvent()出现一些错误 #包括“mainwindow.h” #包括“ui_main window.h” #包括 #包括 #包括“my_qlabel.h” #包括 int-px; int-py; 主窗口::主窗口(QWidget*父窗口): QMainWindow(父级), 用户界面(新用户界面::主窗口) { 用户界面->设置用户界面(此); tmrTimer=新的QTimer(本); 连接(tmrTimer,信号(timeout()),此,插槽(显示位置fMouse()); tmrTimer->start(20); } MainWindow::~MainWindow() { 删除用户界面; } void主窗口::显示位置fmouse() { 用户界面->明文编辑->追加明文(QString(“x,y=)+QString::number(px)+QString::number(py)); } void my_qlabel::MousePresseEvent(QMouseEvent*事件) { 如果(事件->按钮()==Qt::RightButton){ px=事件->x(); py=事件->y(); } }

MousePresseEvent()出现一些错误 #包括“mainwindow.h” #包括“ui_main window.h” #包括 #包括 #包括“my_qlabel.h” #包括 int-px; int-py; 主窗口::主窗口(QWidget*父窗口): QMainWindow(父级), 用户界面(新用户界面::主窗口) { 用户界面->设置用户界面(此); tmrTimer=新的QTimer(本); 连接(tmrTimer,信号(timeout()),此,插槽(显示位置fMouse()); tmrTimer->start(20); } MainWindow::~MainWindow() { 删除用户界面; } void主窗口::显示位置fmouse() { 用户界面->明文编辑->追加明文(QString(“x,y=)+QString::number(px)+QString::number(py)); } void my_qlabel::MousePresseEvent(QMouseEvent*事件) { 如果(事件->按钮()==Qt::RightButton){ px=事件->x(); py=事件->y(); } },qt,Qt,我想显示鼠标单击的位置 我使用ui->明文编辑->追加明文(QString(“x,y=”)+QString::number(px)+QString::number(py))以显示此位置。虽然我单击鼠标,但它只显示x,y=0。为什么会这样?在my_qlabel::MousePresseEvent中访问的py和px是my_qlabel的成员变量,对Main Window::showthepositionofmouse不可见 如果您希望它们可见,则应使用信号和插槽发送它们 以下是一种实现方法: 在m

我想显示鼠标单击的位置
我使用
ui->明文编辑->追加明文(QString(“x,y=”)+QString::number(px)+QString::number(py))以显示此位置。虽然我单击鼠标,但它只显示
x,y=0
。为什么会这样?

my_qlabel::MousePresseEvent
中访问的
py
px
my_qlabel
的成员变量,对
Main Window::showthepositionofmouse
不可见

如果您希望它们可见,则应使用信号和插槽发送它们

以下是一种实现方法:

在my_qlabel.h中,有如下内容:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include <QDebug>
#include "my_qlabel.h"
#include<QTimer>
int px;
int py;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tmrTimer = new QTimer(this);
connect(tmrTimer,SIGNAL(timeout()),this,SLOT(showthepositionofmouse()));
tmrTimer->start(20);
}

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

void MainWindow::showthepositionofmouse()
{
ui->plainTextEdit->appendPlainText(QString(" x ,  y = ")+QString::number(px)+QString::number(py));
}
void my_qlabel::mousePressEvent(QMouseEvent *event)
{ 
if (event->button()==Qt::RightButton){
    px = event->x();
    py = event->y();
}
}
class my_qlabel : public QLabel
{
    Q_OBJECT

signals:
    void right_click_xy(int x, int y);
    // ...constructor and other functions

public slots:
    void mousePressEvent(QMouseEvent *event)
    { 
        int px, py;
        if (event->button()==Qt::RightButton){
            px = event->x();
            py = event->y();
            emit right_click_xy(px, py);
        }
    }
}
在mainwindow.h中,有如下内容:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include <QDebug>
#include "my_qlabel.h"
#include<QTimer>
int px;
int py;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tmrTimer = new QTimer(this);
connect(tmrTimer,SIGNAL(timeout()),this,SLOT(showthepositionofmouse()));
tmrTimer->start(20);
}

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

void MainWindow::showthepositionofmouse()
{
ui->plainTextEdit->appendPlainText(QString(" x ,  y = ")+QString::number(px)+QString::number(py));
}
void my_qlabel::mousePressEvent(QMouseEvent *event)
{ 
if (event->button()==Qt::RightButton){
    px = event->x();
    py = event->y();
}
}
class my_qlabel : public QLabel
{
    Q_OBJECT

signals:
    void right_click_xy(int x, int y);
    // ...constructor and other functions

public slots:
    void mousePressEvent(QMouseEvent *event)
    { 
        int px, py;
        if (event->button()==Qt::RightButton){
            px = event->x();
            py = event->y();
            emit right_click_xy(px, py);
        }
    }
}
另一种替代方法是深入到您的
ui
对象中,并以这种方式访问
px
py

QObject::connect(ui->my_qlabel_instance, SIGNAL(right_click_xy(int,int)), 
    this, SLOT(on_display_click_xy(int, int)));
qDebug()我的标签实例->py;
但这并不优雅,也不是以同样的方式发出信号

研究的另一个想法是使用
QPoint
对象,而不是两个
int
s


希望能有所帮助。

整个想法都不好,您必须在my_qlabel类中通过信号和插槽处理此事件,而不是在my_qlabel类之外。我建议这样做(用鼠标点击的坐标发出信号):

标题my_qlabel.h:

qDebug() << ui->my_qlabel_instance->py;
\ifndef MY\u QLABEL\H
#定义我的标签
#包括
#包括
#包括
类my_qlabel:公共qlabel
{
Q_对象
公众:
我的qlabel(const QString&text=“”,QWidget*parent=0);
信号:
点击无效(QPoint pos);
受保护的:
无效mouseReleaseEvent(QMouseEvent*事件);
};
#endif//myqlabel
来源my_qlabel.cpp:

#ifndef MY_QLABEL_H
#define MY_QLABEL_H

#include <QLabel>
#include <QPoint>
#include <QEvent>

class my_qlabel : public QLabel
{
Q_OBJECT
public:
    my_qlabel( const QString & text="", QWidget * parent = 0 );

signals:
    void clicked(QPoint pos);
protected:
    void mouseReleaseEvent ( QMouseEvent * event );
};

#endif // MY_QLABEL
#包括“my_qlabel.h”
#包括
my_qlabel::my_qlabel(常量QString&text,QWidget*父项)
:QLabel(父级)
{
setText(文本);
}
void my_qlabel::mouseReleaseEvent(QMouseEvent*事件)
{
发出单击(事件->位置());
}
mainwindow.h:

#include "my_qlabel.h"
#include <QMouseEvent>
my_qlabel::my_qlabel( const QString & text, QWidget * parent )
:QLabel(parent)
{
    setText(text);
}
void my_qlabel::mouseReleaseEvent ( QMouseEvent * event )
{
    emit clicked(event->pos());
}
\ifndef主窗口
#定义主窗口
#包括“my_qlabel.h”
#包括
类主窗口:公共QWidget
{
Q_对象
公众:
主窗口(QWidget*父窗口=0);
~main窗口();
公众时段:
无效显示房屋位置(QPoint位置);
};
#endif//main窗口
和mainwindow.cpp:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "my_qlabel.h"
#include <QtGui/QWidget>

class MainWindow : public QWidget
{
Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void showthepositionofmouse(QPoint pos);
};
#endif // MAINWINDOW_H
#包括“mainwindow.h”
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QWidget(父级)
{
my_qlabel*label=新的my_qlabel(“我的标签文本”,this);
标签->设置对齐(Qt::AlignCenter);
QGridLayout*lay=新的QGridLayout(本);
此->设置布局(布局);
lay->addWidget(标签,0,0,1,1);
连接(标签、信号(点击(QPoint))、此、插槽(显示房屋位置(QPoint));
}
MainWindow::~MainWindow()
{
}
void主窗口::显示房屋位置(QPoint位置)
{
qDebug()在您的行
py=event->y();
之后插入时,
qDebug()x()y();
显示什么?