晓py 2025-04-28 18:44 采纳率: 57.1%
浏览 6
已结题

关于#qt#的问题:buttongroup的定义文件buttongroup的声明文件mybutton的声明文件(相关搜索:斗地主|初始化)

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

img


buttongroup的定义文件

img


buttongroup的声明文件

img


mybutton的声明文件

img

mybutton的定义文件

img

  • 写回答

3条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-04-28 18:46
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    根据您提供的代码和问题描述,这是一个关于Qt自定义按钮控件显示图片的问题。我将分析问题并提供解决方案。

    问题分析

    1. 您创建了自定义按钮类MyButton继承自QPushButton
    2. ButtonGroup中初始化这些按钮并设置三种状态的图片
    3. 图片无法正常显示

    主要问题点

    1. 拼写错误:在ButtonGroup::initButtons()中,setImage被误写为setInage
    2. 图片路径问题:路径中可能有空格或格式不正确
    3. 绘图事件拼写错误painEvent应为paintEvent
    4. 循环设置按钮大小:循环条件可能有误

    解决方案

    1. 修正ButtonGroup::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); });
    }
    

    2. 修正MyButton类中的绘图事件

    void MyButton::paintEvent(QPaintEvent* ev)  // 修正拼写错误
    {
        QPainter p(this);
        p.drawPixmap(rect(), m_pixmap);
    }
    

    3. 确保资源文件正确

    1. 检查.qrc文件中是否包含所有图片资源
    2. 确保图片路径正确且图片存在

    4. 其他建议

    1. MyButton构造函数中设置按钮为无边框:

      MyButton::MyButton(QWidget *parent) : QPushButton(parent)
      {
       setFlat(true);
       setStyleSheet("border: none;");
      }
      
    2. 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();
      }
      

    调试建议

    1. setImage方法中添加调试输出,确认图片路径是否正确
    2. 检查.qrc文件是否已正确添加到项目中
    3. 确保所有图片文件实际存在于指定路径

    通过以上修正,您的自定义按钮应该能够正常显示不同状态的图片了。如果仍有问题,请检查图片资源是否正确加载。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月6日
  • 已采纳回答 4月28日
  • 创建了问题 4月28日