看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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())); 不懂為何不行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.182.117 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1496675684.A.716.html
Davinais: 只把元件隱藏起來不好嗎06/06 08:19
可以請教詳情嗎?
Serge45: 想要用signal-slot機制, class宣告內要有Q_OBJECT macro06/06 10:29
謝謝,我晚一點試看看 ※ 編輯: franklin1997 (140.116.49.123), 06/06/2017 15:10:57
chchwy: SLOT(~QPushButton()) <==你認真的嗎... 06/06 20:17
franklin1997: 抱歉新學很多東西不會... 06/07 03:11
剛剛發現訊號槽沒有辦法這樣傳引數,所以應該是刪不掉了,謝謝 ※ 編輯: franklin1997 (218.164.181.198), 06/07/2017 03:13:07 ※ 編輯: franklin1997 (218.164.181.198), 06/07/2017 03:21:54
MOONY135: 自己開一個SLOT DELETE自己 06/07 13:57
taipei90437: 印象中Qt的東西都要先removeItem, 不然後面delete會 06/07 21:24
taipei90437: 有問題 06/07 21:24
bluesoul: 你這個等於用function call delete自己,很危險 06/07 23:49
bluesoul: 呼叫hide()就可以隱藏widget 06/07 23:52
bluesoul: connect(QQ,SIGNAL(clicked()),QQ,SLOT(hide()) 06/07 23:56
uranusjr: 真要 delete 也是可以啦, QObject 有 deleteLater() 06/08 12:12
uranusjr: 機制是在 event loop 下次有空閒時幫你呼叫 desctructor 06/08 12:13