https://blog.csdn.net/kongcheng253/article/details/128769765
pos()函数返回的是相对于当前控件的坐标;
position()函数返回的是相对于当前控件的坐标,但是如果鼠标事件来自于一个子控件,那么它返回的坐标相对于子控件的坐标;
scenePosition()函数返回的是相对于场景的坐标,也就是说它返回的是绝对坐标。
因此,这三个函数的区别在于返回的坐标的参考系不同
例子
假设widget窗口中有一个QLabel控件,控件中包含一个非填充的图片,鼠标点击该图片,则:
pos()函数返回的是相对于QLabel控件的坐标;
position()函数返回的是相对于图片的坐标,也就是说它返回的坐标相对于QLabel控件的坐标加上图片在QLabel控件中的位置偏移量;
scenePos()函数返回的是相对于场景的坐标,但是QLabel并没有关联到场景中,所以它返回的坐标并没有实际意义; ???
globalPos()函数返回的是相对于屏幕的坐标,也就是说它返回的坐标是绝对坐标
QPainter、QPen、QBrush和QPalette都是Qt中用于绘图和界面渲染的类,它们之间有一定的联系和区别
QPainter:QPainter是Qt中的一个用于绘图的类,它提供了各种绘图操作函数,例如drawLine()、drawRect()、drawEllipse()等。通过QPainter,我们可以在Qt中进行各种自定义绘图操作,绘制出美观的界面
QPen:QPen是Qt中的一个用于绘制线条的类,它定义了线条的颜色、宽度、样式等属性。在使用QPainter绘图时,我们可以通过设置QPen来控制线条的属性,从而实现各种线条效果
QBrush:QBrush是Qt中的一个用于绘制填充区域的类,它定义了填充区域的颜色、样式等属性。在使用QPainter绘图时,我们可以通过设置QBrush来控制填充区域的属性,从而实现各种填充效果
QPalette:QPalette是Qt中的一个用于控制界面颜色的类,它定义了控件的背景色、前景色、文本颜色等属性。在Qt中,每个控件都有一个关联的QPalette对象,我们可以通过设置QPalette来改变控件的颜色和外观效果
总的来说,QPainter、QPen、QBrush和QPalette都是用于绘制和渲染界面的类,它们之间的联系是通过QPainter来实现的。QPainter是Qt中最主要的绘图类,通过它我们可以设置QPen、QBrush和QPalette来控制绘图效果和界面外观
QPalette和QBrush的主要区别在于它们的作用和使用场景不同,前者主要用于定义窗口部件的颜色和样式,后者主要用于绘制图形和图像,且可以将QBrush理解为实现UI控件绘制时所需的“画笔”,而QPalette则是绘制颜色和填充属性的管理器
QPalette::setColor / setBrush
setColor()函数仅能对单色背景进行操作,而setBrush()可以使用更复杂的画笔(QBrush)对象。因此,setColor()只能设置一种纯色作为背景(foreground 或 background),而setBrush()支持更多的背景主题类型,如渐变、图片纹理等
setColor()可以直接设置颜色,比如QColor::red;setBrush()则需要通过QBrush库的其他方法先创建一个画刷对象,例如调用QBrush(QColor(…))方法来创建指定颜色的画刷对象。所以在设置简单背景时,setColor()会比较方便,但是在需要复杂背景或前景时,setBrush()的API更丰富、更灵活
QT += uitools
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QUiLoader loader;
QFile file("form2.ui");
file.open(QFile::ReadOnly);
QWidget *myWidget = loader.load(&file);
file.close();
myWidget->show();
}