在Qt Quick 2中嵌入QWidget对象
Embed QWidget object in Qt Quick 2
8个月前,这里有一个问题——如何将基于qwidget的对象嵌入QML,http://doc.qt.digia.com/4.7/declarative-cppextensions-qwidgets.html问题5。在QML中嵌入QWidget对象。情况变了吗?或者对于一些复杂的应用程序,使用自己重新实现的paintEvent,我们只能使用经典的Qt?
QQuickPaintedItem
可用于QPainter
API绘图。
在下面的代码中,我尝试将QCalendarWidget
封装到QQuickPaintedItem
中。它可以正确渲染,但不处理输入事件:
.h:
class CalendarControl : public QQuickPaintedItem
{
Q_OBJECT
public:
explicit CalendarControl(QQuickItem *parent = 0);
virtual ~CalendarControl();
void paint(QPainter *painter);
…
protected:
QCalendarWidget *calendar_;
}
.cpp:
CalendarControl::CalendarControl(QQuickItem *parent)
: QQuickPaintedItem(parent)
, calendar_(NULL)
{
setOpaquePainting(true);
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::AllButtons);
calendar_ = new QCalendarWidget;
// Calendar will draw partially if update is called right here
QTimer::singleShot(0, this, SLOT(update()));
}
void CalendarControl::paint(QPainter *painter)
{
calendar_->render(painter, QPoint(), QRegion(),
QCalendarWidget::DrawWindowBackground | QCalendarWidget::DrawChildren);
}
要捕捉鼠标事件,请覆盖
void hoverEnterEvent(QHoverEvent *event);
void hoverLeaveEvent(QHoverEvent *event);
void hoverMoveEvent(QHoverEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
不过我没能把它们传给QCalendarWidget
,它忽略了它们。但是,当为自定义QWidget
创建包装器时,您可能可以将这些事件直接传递给它
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何在QT Creator上将QWidget声明为继承类的对象
- QWidget findChildren 当对象名称包含特定字符串时
- 如何设置通知功能,以便在创建QWidget派生对象时触发
- 从QWidget获取对象名称(如Qt Designer中所示)
- 在Qt Quick 2中嵌入QWidget对象
- 为什么可以从QWidget创建一个对象而不将其包含在C++程序的开头
- Qt,两个QWidget对象之间的简单连接