作者franklin1997 (台湾犬可爱)
看板C_and_CPP
标题[问题] QT addWidget後可以再remove吗?
时间Mon Jun 5 23:14:39 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1496675684.A.716.html
1F:推 Davinais: 只把元件隐藏起来不好吗06/06 08:19
可以请教详情吗?
2F:推 Serge45: 想要用signal-slot机制, class宣告内要有Q_OBJECT macro06/06 10:29
谢谢,我晚一点试看看
※ 编辑: franklin1997 (140.116.49.123), 06/06/2017 15:10:57
3F:推 chchwy: SLOT(~QPushButton()) <==你认真的吗... 06/06 20:17
4F:→ 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
5F:→ MOONY135: 自己开一个SLOT DELETE自己 06/07 13:57
6F:推 taipei90437: 印象中Qt的东西都要先removeItem, 不然後面delete会 06/07 21:24
7F:→ taipei90437: 有问题 06/07 21:24
8F:推 bluesoul: 你这个等於用function call delete自己,很危险 06/07 23:49
9F:推 bluesoul: 呼叫hide()就可以隐藏widget 06/07 23:52
10F:→ bluesoul: connect(QQ,SIGNAL(clicked()),QQ,SLOT(hide()) 06/07 23:56
11F:→ uranusjr: 真要 delete 也是可以啦, QObject 有 deleteLater() 06/08 12:12
12F:→ uranusjr: 机制是在 event loop 下次有空闲时帮你呼叫 desctructor 06/08 12:13