文章目录
- 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()
{