对不起,英语不好,这不是我的母语。 我需要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';
}
}
答案 0 :(得分:0)
问题在于mainwindow.cpp板上有一个小部件
widget = new QWidget(centralWidget);
widget->setObjectName(QStringLiteral("widget"));
widget->setGeometry(QRect(200, 50, 551, 341));