Qt - UI进阶

Qt - UI 进阶

  • 布局
  • 控件及其坐标
    • pos/position/scenePosition/globalPosition
  • 场景和视图???
  • 绘制
    • QPainter / QPen / QBrush / QPalette
      • QPalette / QBrush
  • 多界面
    • 直接加载.ui文件

布局

https://blog.csdn.net/kongcheng253/article/details/128769765

控件及其坐标

pos/position/scenePosition/globalPosition

pos()函数返回的是相对于当前控件的坐标;
position()函数返回的是相对于当前控件的坐标,但是如果鼠标事件来自于一个子控件,那么它返回的坐标相对于子控件的坐标;
scenePosition()函数返回的是相对于场景的坐标,也就是说它返回的是绝对坐标。
因此,这三个函数的区别在于返回的坐标的参考系不同

例子

假设widget窗口中有一个QLabel控件,控件中包含一个非填充的图片,鼠标点击该图片,则:
pos()函数返回的是相对于QLabel控件的坐标;
position()函数返回的是相对于图片的坐标,也就是说它返回的坐标相对于QLabel控件的坐标加上图片在QLabel控件中的位置偏移量;
scenePos()函数返回的是相对于场景的坐标,但是QLabel并没有关联到场景中,所以它返回的坐标并没有实际意义; ???
globalPos()函数返回的是相对于屏幕的坐标,也就是说它返回的坐标是绝对坐标

场景和视图???

绘制

QPainter / QPen / QBrush / QPalette

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

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更丰富、更灵活

多界面

直接加载.ui文件

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();
}

你可能感兴趣的:(qt,qt,ui,开发语言)