QML 简单扩展不起作用
QML simple extension doesn't work
我正在尝试用C++类扩展QML。我首先创建了一个简单的类Line
。它调用 setter,但不调用 getter 和 paint
方法。知道为什么吗?在QtQuick 1.x中,我应该在构造函数中调用setFlag(QGraphicsItem::ItemHasNoContents, false);
。也许我应该称类似的东西?
这是代码:
Line.h
#ifndef LINE_H
#define LINE_H
#include <QQuickPaintedItem>
class Line : public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(int x1 READ x1 WRITE setx1 NOTIFY x1Changed)
Q_PROPERTY(int y1 READ y1 WRITE sety1 NOTIFY y1Changed)
Q_PROPERTY(int x2 READ x2 WRITE setx2 NOTIFY x2Changed)
Q_PROPERTY(int y2 READ y2 WRITE sety2 NOTIFY y2Changed)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
Q_PROPERTY(int penWidth READ penWidth WRITE setPenWidth NOTIFY penWidthChanged)
public:
Line(QQuickItem *parent = nullptr);
~Line();
void paint(QPainter *painter) override;
int x1() const;
...
signals:
void x1Changed(int arg);
...
public slots:
void setx1(int arg);
...
private:
int m_x1;
...
};
#endif // LINE_H
行.cpp
#include "Line.h"
#include <QPen>
#include <QPainter>
Line::Line(QQuickItem *parent) : QQuickPaintedItem(parent)
{
}
Line::~Line()
{
}
void Line::paint(QPainter *painter)
{
QPen pen(m_color, m_penWidth);
painter->setPen(pen);
int x = qMin(m_x1, m_x2) - m_penWidth/2;
int y = qMin(m_y1, m_y2) - m_penWidth/2;
painter->drawLine(m_x1 - x, m_y1 - y, m_x2 - x, m_y2 - y);
}
int Line::x1() const
{
return m_x1;
}
...
void Line::setx1(int arg)
{
if (m_x1 == arg)
return;
m_x1 = arg;
emit x1Changed(arg);
}
...
另外很明显,我已经在main
中添加了我的班级注册: qmlRegisterType("extentiongui", 1, 0, "Line");
我的QML代码:
Line {
id: lineDelimiter
x1: 863
x2: 863
y1: 660
y2: 800
penWidth: 8000
color: "#c2c2c2"
}
如果您的项目具有视觉内容,则应设置QQuickItem::ItemHasContents
标志。
setFlag(QQuickItem::ItemHasContents, true);
此外,您应该在 setters 函数中调用 update()
来重绘您的项目。
void Line::setx1(int arg)
{
if (m_x1 == arg)
return;
m_x1 = arg;
emit x1Changed(arg);
update();
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 文件写入在PHP扩展c / c ++(linux)中不起作用
- Microsoft具有本机消息传递和非持久连接的边缘扩展不起作用
- 参数包扩展不起作用
- 我的火狐扩展程序不起作用。使用C++XPCOM组件的Firefox扩展(XPI文件)的结构是什么?
- QML 简单扩展不起作用
- 基于文件扩展名的筛选在QFileSystemModel中不起作用
- 内联扩展可能不起作用的情况
- ContextMenu项扩展在Windows 7中不起作用
- 正则表达式替换文件扩展名前缀放置不起作用 - 替换匹配项
- 带有 boost 的 Python 的 C++ 扩展不起作用
- Firefox XPCOM 扩展在安装后不起作用 (C++)
- Rename()函数在尝试向文件添加扩展名时不起作用