QLabel在鼠标经过时改变颜色

时间:2018-07-28 17:36:38

标签: c++ qt qwidget qlabel qmainwindow

对不起,英语不好,这不是我的母语。 我需要QT帮助。 我必须做一个棋盘,就像国际象棋棋盘一样,用8 x 8的瓷砖矩阵。 因此,我做了一个继承了QLabel的类,名为“ Casillero”,另一个是继承自QWidget的板本身名为“ Tablero”的类,并将其作为CentralWidget添加到了主窗口中。

我的问题是,当您将鼠标悬停在图块上时,有人将颜色更改为紫色,而有人则未更改。我不了解这种行为。

the mouse is over the purple tile

the mouse is over the tile over up on the diagonal of the other picture

名为“ Casillero.h”的类图块

class Casillero :public QLabel
{
public:
    Casillero(QWidget* pParent=0, Qt::WindowFlags f=0) : QLabel(pParent, f){};
    Casillero(const QString& text, QWidget* pParent = 0, Qt::WindowFlags f = 0) : QLabel(text, pParent, f){};
    void display(char elem);
    void tileDisplay();
    bool hayPieza;
    int casilleroColor,fil,col,casilleroNum;
    char piezaColor;
};

名为“ Casillero.cpp”的类图块

#include "casillero.h"

void Casillero::display(char elem)
{
    this->piezaColor=elem;
    if(this->hayPieza)
    {
        if(elem == 'R')
        {
            this->setPixmap(QPixmap(":/Imagenes/damaroja.png"));
        }
        else
        {
            this->setPixmap(QPixmap(":/Imagenes/damanegra.png"));
        }
    }
    else
        this->clear();
}

void Casillero::tileDisplay()
{
    if(this->casilleroColor)
        this->setStyleSheet("QLabel {background-color: rgb(118, 150, 85);}:hover{background-color: rgb(170,85,127);}");
    else
        this->setStyleSheet("QLabel {background-color: rgb(238, 238, 210);}:hover{background-color: rgb(170,95,127);}");
}

班级板,名为:“ Tablero.h”

class Tablero :public QWidget
{
public:
    Tablero(QWidget *parent);
private:
    QLabel *bordes[4];
    Casillero *tab[8][8];
};

命名为“ Tablero.cbp”的班板

#include "tablero.h"

Tablero::Tablero(QWidget *parent)
{
    this->setParent(parent);
    bordes[0]=new QLabel(this);
    bordes[0]->setGeometry(330,105,552,20);
    bordes[0]->setStyleSheet("QLabel { background-color :rgb(178, 194, 148); color : black; }");
    bordes[1]=new QLabel(this);
    bordes[1]->setGeometry(330,637,552,20);
    bordes[1]->setStyleSheet("QLabel { background-color :rgb(178, 194, 148); color : black; }");
    bordes[2]=new QLabel(this);
    bordes[2]->setGeometry(330,125,20,512);
    bordes[2]->setStyleSheet("QLabel { background-color :rgb(178, 194, 148); color : black; }");
    bordes[3]=new QLabel(this);
    bordes[3]->setGeometry(862,125,20,512);
    bordes[3]->setStyleSheet("QLabel { background-color :rgb(178, 194, 148); color : black; }");
    int i,j,k=0,hor,ver;
    ver=125;
        for(i=0;i<8;i++)
        {
            hor=350;
            for(j=0;j<8;j++)
            {
                tab[i][j] = new Casillero(this);
                tab[i][j]->casilleroColor=(i+j)%2;
                tab[i][j]->hayPieza=false;
                tab[i][j]->fil=i;
                tab[i][j]->col=j;
                tab[i][j]->casilleroNum=k++;
                tab[i][j]->tileDisplay();
                tab[i][j]->setGeometry(hor,ver,64,64);
                hor+=64;
            }
            ver+=64;
        }

        //damas negras
        for(j=1;j<7;j++)
        {
            tab[0][j]->hayPieza=true;
            tab[0][j]->display('N');
            tab[0][j]->piezaColor='N';
            tab[7][j]->hayPieza=true;
            tab[7][j]->display('N');
            tab[7][j]->piezaColor='N';
        }

        //damas rojas
        for(j=1;j<7;j++)
        {
            tab[j][0]->hayPieza=true;
            tab[j][0]->display('R');
            tab[j][0]->piezaColor='R';
            tab[j][7]->hayPieza=true;
            tab[j][7]->display('R');
            tab[j][7]->piezaColor='R';
        }
}

1 个答案:

答案 0 :(得分:0)

问题在于mainwindow.cpp板上有一个小部件

widget = new QWidget(centralWidget);
widget->setObjectName(QStringLiteral("widget"));
widget->setGeometry(QRect(200, 50, 551, 341));