linux下qt不能使用quint32,QT学习笔记(转载)

#include class IconEditor : public QWidget

{

Q_OBJECT // 必须

//设计师的属性编辑器显示这些自定义属性

Q_PROPERTY(QImage iconImage READ iconImage WRITE setIconImage)

Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)

public:

IconEditor(QWidget *parent = 0);

void setIconImage(const QImage &image);

QImage iconImage() const { return image; }

void setZoomFactor(int zoom);

int zoomFactor() const { return zoom; }

QSize sizeHint() const; // 窗口的理性尺寸

protected:

void mousePressEvent(QMouseEvent *event);

void mouseMoveEvent(QMouseEvent *event);

void paintEvent(QPaintEvent *event); // 必须

private:

QImage image;

int zoom;

};

#endif

IconEditor::IconEditor(QWidget *parent)

: QWidget(parent)

{

setAttribute(Qt::WA_StaticContents);

// 告诉布局管理器,理想尺寸是它的最小尺寸,不能对它缩小!

setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

zoom = 8; // 一个像素将显示成一个8x8的正方形

image = QImage(16, 16, QImage::Format_ARGB32); // 16x16像素的图片

image.fill(qRgba(0, 0, 0, 0)); // 黑色,完全透明

}

void IconEditor::sizeHint() const

{

QSize size = zoom * image.size();

if (zoom >=3)

size += QSize(1, 1);

return size;

}

void IconEditor::setIconImage(const QImage &img)

{

if (img != image)

{

image = img.convertToFormat(QImage::Format_ARGB32);

update(); // 重绘窗口

updateGeometry(); // 告诉布局管理器,理想尺寸已经发生改变,布局需要调整

}

}

自动调用的情况:

窗口第一次显示;

大小改变;

被遮挡,然后再次显示。

主动调用的情况:

update();

repaint(); // 不常用

void IconEditor::paintEvent(QPaintEvent *event)

{

QPainter painter(this);

painter.setPen(palette().forground().color()); // 调色板

painter.drawLine(...);

}

void IconEditor::mousePressEvent(QMouseEvent *event)

{

if (event->button() == Qt::LeftButton)

{

setImagePixel(event->pos(), true);

...

}

else if (event->button() == Qt::LeftButton)

{

setImagePixel(event->pos(), false);

...

}

}

窗口属性Qt::WA_StaticContents

当重新改变窗口部件的大小时,窗口部件的内容并没有发生改变,

而且内容仍旧保留从窗口左上角开始的特性。这样就可以避免重绘

已经显示的区域。

在设计师中集成自定义窗口部件的2种方法

提升法:拖动一个自定义窗口的父窗口对象,右键->提示为...

插件法:创建一个插件库

当应用程序的最后一个窗口关闭时,程序退出

在main中使用下面语句:

QObject::connect( qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()) );

键盘:

Qt::Key_Plus: 对数字小键盘起作用,对于大键盘,要同时按下Shift

Qt::Key_Enter: 对数字小键盘起作用

当定义一个函数时,如果不没有用到其中的参数p,但又不想在编译时,产生警告:

在函数的开头,使用宏

Q_UNUSED(p);

在QGraphicsItem的paint函数中,如果不希望线的宽度缩放,则

painter->setPen(color); //不指定pen的宽度,或者指定为0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值