zyz414275148 2015-08-01 15:05 采纳率: 66.7%
浏览 4351
已采纳

QT中点击右上角红叉调用的函数

我查阅资料知道了QT中点击右上红叉调用的是QWidget类下的closeEvent函数
但是我现在想重写 比如点击时,让ui中的某个label显示的内容改变
但是里面不能直接调用ui->QLabel 请问怎么实现这一点啊~

  • 写回答

4条回答 默认 最新

  • OliverYeung 2015-08-04 16:18
    关注

    假设要显示叉叉的那个按钮类名叫CLabel
    class CLabel : public QLabel
    {
    Q_OBJECT
    public:
    CLabel(QWidget *parent = 0){}

    signals:
    void mousePress();

    protect:
    void mousePressEvent(QMouseEvent *){
    //假设你要把这个CLabel背景改成红色,这也是你说的“让ui中的某个label显示的内容改变”吧
    setStyleSheet("background-color: red");
    //如果还不够过瘾,再发个信号出去给别的控件
    emit mousePress();
    }
    };

    在你代码的某处
    ...
    CLabel *m_cLabel = new CLabel(this);
    DLabel *m_dLabel = new DLabel(this);
    connect(m_cLabel, SIGNAL(mousePress()), m_dLabel, SLOT(deleteLater())); //这样你那个CLabel点击的时候就能对另外的ui里的部件做操作啦,就比如这里的deleteLater
    //或者你不想那么狠,那就把m_dLabel的背景改成黄色吧
    connect(m_cLabel, &CLabel::mousePress, [=]{
    //这种connect的写法前提是你用的qt版本大于5.0并且在pro文件中加入了c++ 11的支持啦
    m_dLabel.setStyleSheet("background-color: yellow");
    });
    (这段代码我没有测试,自己玩玩吧,应该是你说的那个意思了,毕竟你所说的红叉在哪我是抠烂了这个网页也没有找到啊)

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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵