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

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

qt

4个回答

假设要显示叉叉的那个按钮类名叫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");
});
(这段代码我没有测试,自己玩玩吧,应该是你说的那个意思了,毕竟你所说的红叉在哪我是抠烂了这个网页也没有找到啊)

http://blog.sina.com.cn/s/blog_4ba5b45e0102ealz.html

你只要写你的代码,最后加上
event->ignore();
这样就可以达到改写的目的了。

zyz414275148
zyz414275148 不是这个意思,我是想问,怎样在这个函数里调用ui->QLabel ? 我直接写,或者在QMainWindow类里把QWidget设为友元类 都不行呢
4 年多之前 回复
zyz414275148
zyz414275148 不是这个意思,我是想问,怎样在QWidget类里面用到ui里的控件啊。 我直接写ui->q
4 年多之前 回复

其实就挺简单的问题,想问一下怎么在QWidget类里调用ui里的部件啊. 设置友元类还是不行!大大们!

假设你的widget的头文件是ui_xxx.h(在VC下会自动产生),内容一般如下:
class Ui_XXX
{
public:

QLabel *label_1;

void setupUi(QWidget *XXX)
{
   ...
} // setupUi

void retranslateUi(QWidget *XXX)
{
    ...
} // retranslateUi

};

namespace Ui {
class XXX: public Ui_XXX {};
} // namespace Ui

使用这个widget有两种方式:继承和作为成员变量:
class A : public XXX
{}

Class A
{
xxx ui;
}

两种方式下使用XXX下的label_1应该都没问题吧?
所以我觉得还是你使用widget的方式不对,不需要什么友元。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!