我将buttongroup的ui界面的按钮控件类型提升为button自定义类,继承他的所有方法,在主界面中添加提升为buttongroup类的widget控件,在主界面的定义文件初始化添加进来的widget控件,在初始化过时,为按钮添加3中图片,对应不同事件的显示,但显示不出来

buttongroup的定义文件

buttongroup的声明文件

mybutton的声明文件

mybutton的定义文件

我将buttongroup的ui界面的按钮控件类型提升为button自定义类,继承他的所有方法,在主界面中添加提升为buttongroup类的widget控件,在主界面的定义文件初始化添加进来的widget控件,在初始化过时,为按钮添加3中图片,对应不同事件的显示,但显示不出来




mybutton的定义文件

关注让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!
根据您提供的代码和问题描述,这是一个关于Qt自定义按钮控件显示图片的问题。我将分析问题并提供解决方案。
MyButton继承自QPushButtonButtonGroup中初始化这些按钮并设置三种状态的图片ButtonGroup::initButtons()中,setImage被误写为setInagepainEvent应为paintEventButtonGroup::initButtons()方法void ButtonGroup::initButtons()
{
// 开始游戏
ui->start->setImage(":/images/start-1.png", ":/images/start-3.png", ":/images/start-2.png");
// 出牌
ui->playCard->setImage(":/images/chupai_btn-1.png", ":/images/chupai_btn-2.png", ":/images/chupai_btn-3.png");
// 不要
ui->pass->setImage(":/images/pass_btn-1.png", ":/images/pass_btn-2.png", ":/images/pass_btn-3.png");
// 不抢
ui->giveup->setImage(":/images/buqiang-1.png", ":/images/buqiang-2.png", ":/images/buqiang-3.png");
// 1,2,3分
ui->oneScore->setImage(":/images/1fen-1.png", ":/images/1fen-2.png", ":/images/1fen-3.png");
ui->twoScore->setImage(":/images/2fen-1.png", ":/images/2fen-2.png", ":/images/2fen-3.png");
ui->threeScore->setImage(":/images/3fen-1.png", ":/images/3fen-2.png", ":/images/3fen-3.png");
// 设置按钮大小
QVector<MyButton*> btns;
btns << ui->start << ui->playCard << ui->playCardl << ui->pass
<< ui->giveup << ui->oneScore << ui->twoScore << ui->threeScore;
for(int i = 0; i < btns.size(); ++i) // 修正循环条件
{
btns[i]->setFixedSize(90, 45);
}
// 建立链接
connect(ui->start, &MyButton::clicked, this, &ButtonGroup::startGame);
connect(ui->playCard, &MyButton::clicked, this, &ButtonGroup::playHand);
connect(ui->playCardl, &MyButton::clicked, this, &ButtonGroup::playHand);
connect(ui->pass, &MyButton::clicked, this, &ButtonGroup::pass);
connect(ui->giveup, &MyButton::clicked, this, [=](){ emit betPoint(0); });
connect(ui->oneScore, &MyButton::clicked, this, [=](){ emit betPoint(1); });
connect(ui->twoScore, &MyButton::clicked, this, [=](){ emit betPoint(2); });
connect(ui->threeScore, &MyButton::clicked, this, [=](){ emit betPoint(3); });
}
MyButton类中的绘图事件void MyButton::paintEvent(QPaintEvent* ev) // 修正拼写错误
{
QPainter p(this);
p.drawPixmap(rect(), m_pixmap);
}
.qrc文件中是否包含所有图片资源在MyButton构造函数中设置按钮为无边框:
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
setFlat(true);
setStyleSheet("border: none;");
}
在setImage方法中添加图片加载检查:
void MyButton::setImage(QString normal, QString hover, QString pressed)
{
m_normal = normal;
m_hover = hover;
m_press = pressed;
if(!m_pixmap.load(m_normal)) {
qDebug() << "Failed to load image:" << m_normal;
}
update();
}
setImage方法中添加调试输出,确认图片路径是否正确.qrc文件是否已正确添加到项目中通过以上修正,您的自定义按钮应该能够正常显示不同状态的图片了。如果仍有问题,请检查图片资源是否正确加载。