본문 바로가기

QT/QWidgets

[C++, QT] QLabel 라벨위에 마우스 커서 ON , OFF 일때 색깔 변화 시키기

mainwindow.h

더보기

#ifndef MAINWINDOW_H

#define MAINWINDOW_H
#include <QMainWindow>

#include <QLabel>

 

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE


class PLabel;
class MainWindow : public QMainWindow

{

 

Q_OBJECT
public: MainWindow(QWidget *parent = nullptr);

~MainWindow();


private: Ui::MainWindow *ui;

PLabel * lbl1;

PLabel * lbl2;

PLabel * lbl3;

};

 

/*

* QWidget 에 있는 SIGNAL 중 

* virtual void enterEvent(QEvent *event);

* virtual void leaveEvent(QEvent *event);

* 이 두가지 가상 메소드를 오버라이드 하기 위해 PLabel 클래스를 만들어 QLabel을 상속

*/
class PLabel : public QLabel

{

public:

PLabel(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags());

 

// 상속
void enterEvent(QEvent *event) override;

void leaveEvent(QEvent *event) override;

};


#endif // MAINWINDOW_H

 

mainwindow.cpp

더보기

#include "mainwindow.h"

#include "ui_mainwindow.h"
#include <QPushButton>

#include <QLineEdit>

#include <QFileDialog>

#include <QGridLayout>

#include <QMouseEvent>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow)

{

 

ui->setupUi(this);
QGridLayout * main_layout = new QGridLayout;

ui->centralwidget->setLayout(main_layout);

 

// 라벨 생성

lbl1 = new PLabel;

lbl2 = new PLabel;

lbl3 = new PLabel;

 

// 크기 지정
lbl1->setFixedSize(100, 100);

lbl2->setFixedSize(100, 100);

lbl3->setFixedSize(100, 100);

 

// 최초 색상 지정
lbl1->setStyleSheet("background-color:green");

lbl2->setStyleSheet("background-color:green");

lbl3->setStyleSheet("background-color:green");


main_layout->addWidget(lbl1);

main_layout->addWidget(lbl2);

main_layout->addWidget(lbl3);

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

 


// ******************** PLabel 

PLabel::PLabel(QWidget *parent, Qt::WindowFlags f):QLabel(parent, f){}

 

// 오버라이드 한 메소드를 정의 

// 마우스가 라벨위로 진입할때 해당 메소드가 호출
void PLabel::enterEvent(QEvent *event)

{ this->setStyleSheet("background-color:red"); }

 

// 마우스가 라벨에서 벗어날때 해당 메소드가 호출
void PLabel::leaveEvent(QEvent *event)

{ this->setStyleSheet("background-color:green"); }

라벨위 마우스 ON green -> red, OFF red -> green