1. 程式人生 > 其它 >qt之如何自定義一個類,並與mainwindows關聯起來

qt之如何自定義一個類,並與mainwindows關聯起來

技術標籤:qtc++androidjavaoracle

8e30814a0810de31c3f7ca181b93e120423.jpg

參考:https://blog.csdn.net/elf001/article/details/8968442

1、自己實現一個類Scene類繼承QGraphicsScene,定義訊號和事件。當滑鼠按下事件發生時,發射訊號message:新增C class檔案

1.1、Scene.h中:

#ifndef SCENE_H
#define SCENE_H

class QGraphicsSceneMouseEvent;

#include <QGraphicsScene>

class Scene : public QGraphicsScene
{
  Q_OBJECT
public:
  Scene( );                       // constructor
signals:
  void  message( QString );                                  // 文字訊息訊號
protected:
  void  mousePressEvent( QGraphicsSceneMouseEvent* );        // 接收滑鼠按下事件
};

#endif // SCENE_H

1.2、Scene.cpp中:


#include "scene.h"

#include <QGraphicsSceneMouseEvent>

Scene::Scene( ) : QGraphicsScene()
{

}

/********************************** mousePressEvent **********************************/

void  Scene::mousePressEvent( QGraphicsSceneMouseEvent* event )
{
  // 判斷使用者是否按下滑鼠左鍵
  if ( event->button() != Qt::LeftButton ) return;

  // 傳送資訊訊號
  qreal  x = event->scenePos().x();
  qreal  y = event->scenePos().y();
  emit message( QString("Clicked at %1,%2").arg(x).arg(y) );
}

2、在GUI中mainwindows中

2.1、mainwindow.h中

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "scene.h"

class Scene;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Scene* m_scene;

public slots:   //新增槽方法的定義
  void showMessage( QString );        // 在狀態列上顯示訊息

};

#endif // MAINWINDOW_H

2.2、mainwhidow.cpp中

1、例項❀一個Scene,給mainwindow建立一個場景和檢視:將檢視放入場景,編寫槽函式
#include "mainwindow.h"
#include <QMenuBar>
#include <QStatusBar>
#include <QGraphicsView>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    menuBar()->addMenu( "&File" );
    menuBar()->addMenu( "&Edit" );
    menuBar()->addMenu( "&View" );
    menuBar()->addMenu( "&Simulate" );
    menuBar()->addMenu( "&Help" );

    statusBar()->showMessage("QSimulate has started");

    // 建立場景和顯示場景的中央檢視部件
    m_scene               = new Scene();
    QGraphicsView*   view = new QGraphicsView( m_scene );
    view->setAlignment( Qt::AlignLeft | Qt::AlignTop );
    view->setFrameStyle( 0 );
    setCentralWidget( view );

    //將訊號與槽關聯:m_scene發射message訊號時,MainWindow接收訊號,執行showMessage槽函式
    connect( m_scene, SIGNAL(message(QString)), this, SLOT(showMessage(QString)) );
}

MainWindow::~MainWindow()
{

}

void  MainWindow::showMessage( QString msg )
{
  statusBar()->showMessage( msg );  // 在主視窗狀態列上顯示訊息
}

2.3、main.cpp中

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

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

    return a.exec();
}