我查閱資料知道了QT中點擊右上紅叉調用的是QWidget類下的closeEvent函數
但是我現在想重寫 比如點擊時,讓ui中的某個label顯示的內容改變
但是裡面不能直接調用ui->QLabel 請問怎麼實現這一點啊~
假設要顯示叉叉的那個按鈕類名叫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");
});
(這段代碼我沒有測試,自己玩玩吧,應該是你說的那個意思了,畢竟你所說的紅叉在哪我是摳爛了這個網頁也沒有找到啊)