• 7266阅读
  • 6回复

[提问]qt5.3 中 signals 的問題 [复制链接]

上一主题 下一主题
离线seeing
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-10
大家好,
   我的 qt 是 5.3,建立一個 mainwindow 的程式,再建立一個 class,內容如下
  1. [.h]
  2. #ifndef __VectorDrawRectItem_H_
  3. #define __VectorDrawRectItem_H_
  4. #include <QGraphicsRectItem>
  5. QT_BEGIN_NAMESPACE
  6. class QGraphicsRectItem;
  7. QT_END_NAMESPACE
  8. class CVectorDrawRectItem : public QGraphicsRectItem
  9. {
  10.     Q_OBJECT
  11. public:
  12.     CVectorDrawRectItem(QGraphicsItem *parent = 0);
  13. signals:
  14.     void abc();
  15. };
  16. #endif // __VectorDrawRectItem_H_
  17. [.cpp]
  18. #include "VectorDrawRectItem.h"
  19. CVectorDrawRectItem::CVectorDrawRectItem(QGraphicsItem *parent)
  20.     : QGraphicsRectItem(parent)
  21. {
  22.     emit abc();
  23. }
將這個程式編譯後會出現 55 個錯誤,如果將 Q_OBJECT, signals, void abc(), emit abc() 等跟 signals 有關的部份刪掉,就完全沒問題,請問這個錯誤有什麼比較好的方法解決嗎?

謝謝

离线dbzhang800

只看该作者 1楼 发表于: 2014-07-10
Note that, QGraphicsRectItem is not a subclass of QObject, so signals and slots can not be used in it.
离线seeing

只看该作者 2楼 发表于: 2014-07-10
原來如此,感謝版主解惑,謝謝您
离线seeing

只看该作者 3楼 发表于: 2014-07-10
那 QGraphicsRectItem 可以觸發 MousePressEvent 的 signal 嗎?

事情是這樣的:
原本讓 QGraphicsRectItem  可點選,可以設置 setFlag(QGraphicsItem::ItemIsSelectable, true);
可是這樣會有個矩形的外框,而我不想要這個外框,所以將 ItemIsSelectable 設成 false。但這樣一來又無法得知是否有被點選,所以才想要在 QGraphicsRectItem  中的 MousePressEvent  內 emit signal

原本判斷是否有被點選是這樣寫的
  1. foreach (QGraphicsItem *item, selectedItems())
  2. {
  3. ...
  4. }

那這樣的話就沒辦法使用 signal 了,不知道有建議的方式嗎?
离线roywillow

只看该作者 4楼 发表于: 2014-07-10
回 seeing 的帖子
seeing:那 QGraphicsRectItem 可以觸發 MousePressEvent 的 signal 嗎?
事情是這樣的:
原本讓 QGraphicsRectItem  可點選,可以設置 setFlag(QGraphicsItem::ItemIsSelectable, true);
可是這樣會有個矩形的外框,而我不想要這個外框,所以將 ItemIsSelectable 設成 false .. (2014-07-10 23:09) 

这个就不是signal了,这个是event
能不能有作用不太清楚,你试试应该就知道了吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线彩阳

只看该作者 5楼 发表于: 2014-07-11
可以自己定义一个类,同时继承QObject和QGraphicsRectItem,记得QObject继承放在前面。这样的话就可以有信号和槽了。
上海Qt开发联盟,热忱地欢迎你的加入!
离线seeing

只看该作者 6楼 发表于: 2014-07-11
回 彩阳 的帖子
彩阳:可以自己定义一个类,同时继承QObject和QGraphicsRectItem,记得QObject继承放在前面。这样的话就可以有信号和槽了。 (2014-07-11 09:09) 

哈,果然可以,已經可以在 MousePressEvent 裡面 emit signal 了,太感謝了
快速回复
限100 字节
 
上一个 下一个