- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
十七、Qt2D绘图(七)Qt坐标系统深入
十七、Qt 2D绘图(七)Qt坐标系统深入
本文章原创于 转载请注明出处。
接着上面一节,前面只是很简单的讲解了一下Qt坐标系统的概念,通过对几个
函数的应用,我们应该已经对Qt的坐标系统有了一个模糊的认识。那么现在就
来让我们更深入地研究一下Qt窗口的坐标。希望大家把这一节的例子亲手做一
下,不要被我所说的东西搞晕了!
我们还是在以前的工程中进行操作。
获得坐标信息:
为了更清楚地获得坐标信息,我们这里利用鼠标事件,让鼠标点击左键时输出该
点的坐标信息。
1.在工程中的dialog.h文件中添加代码。
添加头文件: #include QMouseEvent
在public中添加函数声明:void mousePressEvent(QMouseEvent *);
然后到dialog.cpp文件中:
添加头文件: #include QDebug
定义函数:
void Dialog::mousePressEvent(QMouseEvent *event)
{
qDebug() event-pos();
}
这里应用了qDebug()函数,利用该函数可以在程序运行时将程序中的一些信息
输出,在Qt Creator中会将信息输出到其下面的Application Output窗口。这
个函数很有用,在进行简单的程序调试时,都是利用该函数进行的。我们这里利
用它将鼠标指针的坐标值输出出来。
2.然后更改重绘事件函数。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawRect(0,0,50,50);
}
我们绘制了一个左上顶点为(0,0),宽和高都是50的矩形。
3.这时运行程序。并在绘制的矩形左上顶点点击一下鼠标左键。效果如下。(点
击可看大图)
因为鼠标点的不够准确,所以输出的是(1,0),我们可以认为左上角就是原点
(0,0)点。你可以再点击一下矩形的右下角,它的坐标应该是(50,50)。这
个方法掌握了以后,我们就开始研究这些坐标了。
研究放大后的坐标
1.我们现在进行放大操作,然后查看其坐标的变化。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.scale(2,2); //横纵坐标都扩大2倍
painter.drawRect(0,0,50,50);
}
我们将横纵坐标都扩大2倍,然后运行程序,查看效果:
我们点击矩形右下顶点,是(100,100),比以前的(50,50)扩大了2倍。
研究QPixmap或QImage的坐标
对于QWidget,QPixmap或QImage等都是绘图设备,我们都可以在其上利用
QPainter进行绘图。现在我们研究一下QPixmap的坐标(QImage与其效果相同)。
1.我们更改重绘事件函数如下。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix(200,200);
pix.fill(Qt::red); //背景填充为红色
painter.drawPixmap(0,0,pix);
}
这里新建了一个宽、高都是200像素的QPixmap类对象,并将其背景颜色设置为
红色,然后从窗口的原点(0,0)点添加该QPixmap类对象。为了表述方便,在
下面我们将这个QPixmap类对象pix称为画布。
我们运行程序,并在画布的左上角和右下角分别点击一下,效果如下:
可以看到其左上角为(0,0)点,右下角为(200,200)点,是没有问题的。
2.我们再将函数更改如下。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix(200,200);
pix.fill(Qt::red); //背景填充为红色
painter.drawPixmap(100,100,pix);
}
这时我们从窗口的(100,100)点添加该画布,那么此时我们再点击画布的右上
角,其坐标会是多少呢?
可以看到,它是(100,100),没错,这是窗口上的坐标,那么这是不是画布上
的坐标呢?
3.我们接着更改函数。
void Dialog::paintEven
您可能关注的文档
最近下载
- 2023-2024学年湘教版八年级上册地理期末复习知识点 .pdf VIP
- 园林工程制图习题集答案.pptx VIP
- 扬州梅岭小学2023-2024六年级数学上册期末复习试卷(四)及答案.docx VIP
- 纪委书记2024年个人述职述责述廉报告.docx VIP
- 1.4 观察洋葱表皮细胞 同步分层作业 科学六年级上册(教科版).docx
- 专题02:回忆往昔-2023-2024学年八年级语文上册单元主题阅读(统编版)(原卷版+解析).docx VIP
- 2024AI Agent市场研究报告.pdf
- 技术服务和质保期服务计划.docx VIP
- 广州长隆旅游度假区营销策略研究.docx
- 陶瓷有限公司安全现状评价报告.doc
文档评论(0)