QWidget成员函数功能和使用详细说明(四)(文字+用例+代码+效果图)

文章目录

  • 1.测试工程配置
  • 2.成员函数
    • 2.1 void setParent(QWidget *parent)
    • 2.2 void setMouseTracking(bool enable)
    • 2.3 bool hasMouseTracking() const
    • 2.4 void setPalette(const QPalette &)
    • 2.5 const QPalette &palette() const
    • 2.6 int QWidget::grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut)
    • 2.7 void setSizeIncrement(const QSize &)
    • 2.8 void setSizePolicy(QSizePolicy)
    • 2.9 QSizePolicy sizePolicy() const
    • 2.10 void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
    • 2.11 void setUpdatesEnabled(bool enable)
    • 2.12 bool updatesEnabled() const
    • 2.13 void setWindowFilePath(const QString &filePath)
    • 2.14 void setWindowFlags(Qt::WindowFlags type)
    • 2.15 void setWindowIcon(const QIcon &icon)
    • 2.16 void setWindowModality(Qt::WindowModality windowModality)
    • 2.17 Qt::WindowModality windowModality() const
    • 2.18 void setWindowOpacity(qreal level)

1.测试工程配置

创建名为QtGuiAppTest的qwidget工程,带ui文件
在这里插入图片描述

2.成员函数

继承自QObject和QPaintDevice。QObject详见QObject各成员函数功能详细说明(文字+用例+代码+效果图)

2.1 void setParent(QWidget *parent)

给当前控件设置父控件,当前控件会移动到新的parent的(0,0)位置

2.2 void setMouseTracking(bool enable)

(1)功能说明
属性mouseTracking : bool用于设置控件的鼠标跟踪是否启用
如果鼠标跟踪不启用,则仅当鼠标按住左键并移动时控件才能接收到鼠标移动事件
如果鼠标跟踪开启,则不需要鼠标按下,只要鼠标移动就能获取到鼠标移动事件
(2)效果展示
在这里插入图片描述

(3)调用程序
QtGuiAppTest.ui
在这里插入图片描述

QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
   
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
    ~QtGuiAppTest();
public slots:
    void SlotTest(int checkStat);
protected:
    void mouseMoveEvent(QMouseEvent* event)override;
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
#include<qevent.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    :  QWidget(parent)
{
   
    ui.setupUi(this);
    connect(ui.checkBox, &QCheckBox::stateChanged,  this, &QtGuiAppTest::SlotTest);
}
QtGuiAppTest::~QtGuiAppTest()
{
   
}
void QtGuiAppTest::SlotTest(int checkStat)
{
   
    switch(checkStat)
    {
   
    case Qt::Unchecked:
        this->setMouseTracking(false);
        break;
    case Qt::Checked:
        this->setMouseTracking(true);
        break;
    default:
        break;
    }
}
void QtGuiAppTest::mouseMoveEvent(QMouseEvent* event)
{
   
    int x = event->x();
    int y = event->y();
    QString str = QString("mouse pos: ( %1, %2  )").arg(x).arg(y);
    ui.textBrowser->setText(str);
}

2.3 bool hasMouseTracking() const

判断是否设置了鼠标跟踪

2.4 void setPalette(const QPalette &)

(1)功能说明
属性palette : QPalette,存储了控件的调色板信息
该属性描述了控件的调色板。在渲染标准组件时,组件的样式使用调色板,并可用作确保自定义控件能够与本机平台的外观保持一致的手段。不同的平台或不同的风格具有不同的调色板是很常见的。
将新调色板分配给一个控件时,此调色板中的颜色角色将与控件的默认调色板组合在一起,形成控件的最终调色板。控件的背景角色的调色板条目用于填充控件的背景(请参阅 QWidget::autoFillBackground),前台角色(foreground role)用于初始化 QPainter 的笔。(即设置了前台颜色角色,则使用qpainter绘制时会渲染为前台颜色)
默认值取决于系统环境。QApplication 维护一个系统/主题调色板,该调色板作为所有控件的默认值。对于某些类型的控件,也可能有特殊的调色板默认值(例如,在 Windows Vista 上,所有派生自 QMenuBar 的类都有一个特殊的默认调色板)。您还可以通过将自定义调色板和控件名称传递给 QApplication::setPalette() 来自行定义控件的默认调色板。最后,样式始终可以在调色板设置之后进行润色(参见 QStyle::polish())。
QWidget 将显式调色板角色从父控件传播到子控件。如果将画笔或颜色分配给调色板上的特定角色,并将该调色板分配给一个控件,则该角色将传播到控件的所有子控件,并覆盖该控件的任何系统默认值。请注意,默认情况下,调色板不会传播到窗口(参见 isWindow()),除非启用了 Qt::WA_WindowPropagation 属性。
当前样式用于渲染所有标准Qt控件的内容,可以从控件调色板中*选择颜色和画笔,或者在某些情况下,忽略调色板(部分或全部)。特别是,某些样式(如 GTK 样式、Mac 样式和 Windows Vista 样式)依赖于第三方 API 来呈现控件的内容,并且这些样式通常不遵循调色板。因此,将角色分配给控件的调色板并不能保证更改控件的外观。相反,您可以选择应用样式表。
(2)效果展示
在这里插入图片描述

部分子控件跟随父控件pallet变化颜色,且子控件设置自己的pallet是不起作用的
(3)调用程序
QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
   
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
    ~QtGuiAppTest();
public slots:
    void SlotTest(int checkStat);
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    :  QWidget(parent)
{
   
    ui.setupUi(this);
    QPalette p(QColor(148, 233, 237));
    this->setPalette(p);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest);
}
QtGuiAppTest::~QtGuiAppTest()
{
   
上一篇:机车自动换档系统的单片机设计方案


下一篇:开发个人Go-ChatGPT--5 模型管理 (一)