1

「現在、このプログラムをコンパイルしようとして問題が発生しています。プログラムは、GUI QWidget でマウスの座標を表示することになっています。エラーは、mainwindow.cpp ファイルの 6 行目にあります。

//header
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QApplication>
#include <QMainWindow>
#include <QMouseEvent>
#include <QMessageBox>
#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();

    void mouseReleaseEvent(QMouseEvent * event);

    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QMessageBox *msgBox;
};

#endif // MAINWINDOW_H

「mainwindow.cpp ファイル」

    #include "mainwindow.h"
    #include "ui_mainwindow.h"

MainWindow::MainWindow()
{
   MainWindow::mouseReleaseEvent (QMouseEvent * event);
}

void MainWindow::mouseReleaseEvent(QMouseEvent * event)
{
    msgBox = new QMessageBox();
    msgBox -> setWindowTitle("Coordinates");
    msgBox -> setText("You released the button");
    msgBox -> show();
}

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

「main.cpp」

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow *w = new MainWindow();

    w->setWindowTitle(QString::fromUtf8("QT-capture mouse release"));
            w->resize(300, 250);


    w->show();

    return a.exec();
}

助けてください。ポインターとおそらくミューテーターに関連するものであることはわかっていますが、まだわかりません。ありがとうございました。

4

1 に答える 1

1

これは違法です:

MainWindow::MainWindow()
{
    // illegal:
    MainWindow::mouseReleaseEvent (QMouseEvent * event);
}

ハンドラーを手動で呼び出したい場合は、イベントを作成して渡す必要があります。

MainWindow::MainWindow()
{
    QMouseEvent event;
    MainWindow::mouseReleaseEvent(&event);
}

しかし、その後 QMouseEvent 属性を正しく設定する必要があります。なぜそれを行いたいのかを知らずに、その方法を伝えるのは困難です。

そんなことしてるの?これらのイベントは、マウスのアクティビティ時に自動的に発行されます。手動で mouseReleaseEvent を呼び出す必要はありません。マウス ボタンを離したときに呼び出されます。

マウスの位置を表示したい場合は、次のことをお勧めします。

  • mouseReleaseEventで置き換えますmouseMoveEvent
  • 通話中の通話を削除するだけですMainWindow::MainWindow()
  • MainWindow::mouseMoveEvent(QMouseEvent * event)メッセージ ボックスを使用するのではなく、メイン ウィンドウのラベルにマウス座標を書き込むようにします (マウス座標を使用して a をフォーマットし、をQString使用QMouseEvent::posしてラベル テキストを変更しますQLabel::setText) 。

そのように:

void MainWindow::mouseMoveEvent(QMouseEvent * event)
{ 
    std::stringstream str;
    str << "Mouse position is " << event->pos.x() << ";" << event->pos().y();
    ui->label->setText( str.str().c_str() );
}
于 2015-10-25T07:03:52.203 に答える