[問題] QT addWidget後可以再remove嗎?

作者: franklin1997 (富蘭克林)   2017-06-05 23:14:39
開發平台(Platform): (Ex: Win10, Linux, ...)
linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
QT creator
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
Scene Class繼承QGraphicsScene。
用QGraphicsScene::addWidget將PushButton加入Scene中。
希望可以按了PushButton之後,PushButton會從Scene中移除。
寫了connect(QQ,SIGNAL(clicked()),this,SLOT(deleteQQ(QQ)));
錯誤訊息是:QObject::connect: No such slot QGraphicsScene::deleteQQ(QQ)
可是不是應該要是Scene::deleteQQ(QQ)嗎?
餵入的資料(Input):
按一下PushButton
預期的正確結果(Expected Output):
PushButton消失
錯誤結果(Wrong Output):
沒有消失
程式碼(Code):(請善用置底文網頁, 記得排版)
#ifndef SCENE_H
#define SCENE_H
#include <QGraphicsScene>
#include <QGraphicsProxyWidget>
#include <QPushButton>
class Scene:public QGraphicsScene
{
public:
Scene();
QPushButton* QQ;
public slots:
void deleteQQ(QPushButton* T);
};
#endif // SCENE_H
__________________________________________________________________
#include "scene.h"
#include <QApplication>
Scene::Scene()
{
QQ= new QPushButton();
QQ->setGeometry(50,50,100,30);
QQ->setText(tr("自生自滅鍵"));
QGraphicsProxyWidget *QQQ = this->addWidget(QQ);
//按一下按鈕後按鈕從scene消失
connect(QQ,SIGNAL(clicked()),this,SLOT(deleteQQ(QQ)));
}
void Scene::deleteQQ(QPushButton* T){
delete T;
}
補充說明(Supplement):
有其他可以把PushButton移除的方法也請麻煩教我...
試過connect(QQ,SIGNAL(clicked()),QQ,SLOT(~QPushButton()));
不懂為何不行。
作者: Davinais (水靈流喵)   2017-06-06 08:19:00
只把元件隱藏起來不好嗎
作者: Serge45 (QAQ)   2017-06-06 10:29:00
想要用signal-slot機制, class宣告內要有Q_OBJECT macro
作者: chchwy (mat)   2017-06-06 20:17:00
SLOT(~QPushButton()) <==你認真的嗎...
作者: franklin1997 (富蘭克林)   2017-06-07 03:11:00
抱歉新學很多東西不會...
作者: MOONY135 (談無慾)   2017-06-07 13:57:00
自己開一個SLOT DELETE自己
作者: taipei90437 (囧)   2017-06-07 21:24:00
印象中Qt的東西都要先removeItem, 不然後面delete會有問題
作者: bluesoul (忙死你老爸)   2017-06-07 23:49:00
你這個等於用function call delete自己,很危險呼叫hide()就可以隱藏widgetconnect(QQ,SIGNAL(clicked()),QQ,SLOT(hide())
作者: uranusjr (←這人是超級笨蛋)   2017-06-08 12:12:00
真要 delete 也是可以啦, QObject 有 deleteLater()機制是在 event loop 下次有空閒時幫你呼叫 desctructor

Links booklink

Contact Us: admin [ a t ] ucptt.com