1.测试工程配置

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

2.成员函数

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

2.1 void setAcceptDrops(bool on)

acceptDrops : bool这个属性代表放下事件(drop events)在当前widget是否是使能的;将该属性设置为true,即是向系统声明了当前widget可以接受放下事件。
如果当前widget是桌面,则当其他应用正在使用桌面时,设置true的行为可能会失败。可以通过调用acceptDrops()判断widget是否接收放下事件。具体使用参考另一篇文章《图形视图框架》中的拖拽机制。

2.2 bool acceptDrops() const

获取widget是否能接收放下事件的状态,true为能接收。

2.3 void setAccessibleDescription(const QString &description)

accessibleDescription : QString这个属性保存了widget的描述,该描述可以通过辅助技术手段看到(例如辅助显示的客户端,提供视觉外观的文本说明,可以为视弱或盲人用户提供更多的上下文,也可用于上下文搜索或其他应用程序)。
一个widget的描述应该传递这个widget是做什么的的描述。当一个widget的accessibleName是一个简短的字符串(例如:保存),那么这个描述应该给更多的上下文信息(例如:保存当前文档)。默认情况下,该属性包含一个空的字符串。

2.4 bool acceptDescription() const

获取属性accessibleDescription的内容

2.5 void setAccessibleName(const QString &name)

accessibleName : QString 这个属性持有widget的名字,该名字可以通过辅助技术手段看到(说明见第2.3节)。当通过辅助技术手段例如通过屏幕阅读器去阅览界面的时候,该名字表示了一个widget。对于多数widget的设置,这个属性并不需要。例如对于qpushbutton的对象,使用按钮的text即可。
还有一种情况该属性显得比较重要,就是当widget不提供任何的文本。例如一个仅包含图片的按钮,需要设置这个属性,在屏幕阅读器中起到关键作用(让使用者知道存在一个按钮)。这个名称应该是简短且能传递出widget的视觉信息的。默认情况下,该字段包含一个空字符串。

2.6 QString accessibleName() const

获取属性accessibleName的内容

2.7 void setAttribute(Qt::WidgetAttribute attribute, bool on = true)

如果参数on为true,则调用该函数可设置名称为attribute的控件属性。否则,如果参数on为false,则调用该函数作用为清除属性attribute
Qt::WidgetAttribute为枚举值。

2.8 bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const

如果指定的属性attribute已经设置在这个控件上,则返回true,否则返回false

2.9 void setAutoFillBackground(bool enabled)

autoFillBackground : bool 这个属性决定当前控件背景是否是自动填充
如果设置为true,这个属性将导致在调用绘制事件(paint event)之前,qt去填充控件的背景。填充的颜色由控件的调色板的QPalette::Window定义
窗口总是使用QPalette::Window来填充,除非WA_OpaquePaintEvent或WA_NoSystemBackground属性被设置了
如果控件的父类对背景色有一个静态渐变设置,那么这个属性就不能关闭。
默认该属性为false。应用例子见2.11节。

2.10 bool autoFillBackground() const

获取是否自动背景填充的状态

2.11 void setBackgroundRole(QPalette::ColorRole role)

(1)功能说明
将控件的背景角色设置为参数role。
背景角色定义了来自控件调色板( QPalette)的刷子(即刷子的颜色由控件调色板的枚举值确定),被用来渲染背景。
如果参数role的值是QPalette::NoRole,则控件继承父类背景角色。
QPalette::ColorRole详细定义如下:

常量名 常量值 描述
QPalette::Window 10 一个通用的背景颜色
QPalette::Background 这个值无效,请使用 QPalette::Window替代
QPalette::WindowText 0 一个通用的前景颜色
QPalette::Foreground 这个值无效,请使用QPalette::WindowText替代
QPalette::Base 9 用于大多数文本输入控件的背景颜色,但也用于其他的绘制-例如combobox下拉列表和工具栏的背景颜色,它通常是白色或其他浅色
QPalette::AlternateBase 16 用作具有交替行颜色的视图中的备用背景色
QPalette::ToolTipBase 18 用作qtooltip和qwhatthis的背景颜色。qtooltip使用调色板中的非活动颜色组,因为tooltips是不活动窗口
QPalette::ToolTipText 19 用作qtooltip和qwhatthis的背景颜色。qtooltip使用调色板中的非活动颜色组,因为tooltips是不活动窗口
QPalette::PlaceholderText 20 用作各种文本输入控件的占位符颜色
QPalette::Text 6 背景颜色用Base。通常与 WindowText相同
QPalette::Button 1 通用按钮背景颜色,不能与Window相同
QPalette::ButtonText 8 一个前景颜色,使用QPalette::Button
QPalette::BrightText 7 文本颜色,与QPalette::WindowText有较大差别,例如黑色。

(2)效果展示
点击按钮,设置背景颜色为黑色
在这里插入图片描述
(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 slottest1();
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::slottest1);
}
QtGuiAppTest::~QtGuiAppTest()
{
}
void QtGuiAppTest::slottest1()
{
    //设置背景填充色
    setBackgroundRole(QPalette::Dark);
    //打开自动填充
    setAutoFillBackground(true);
}

main.cpp

#include "QtGuiAppTest.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtGuiAppTest w;
    w.show();
    return a.exec();
}

2.12 QPalette::ColorRole QWidget::backgroundRole() const

获取当前设置的背景色。

2.13 void setBaseSize(const QSize &)

baseSize : QSize,该属性控制控件的基本尺寸。
如果控件定义了sizeIncrement(),基本尺寸用于计算一个合适的控件的大小。
默认情况,对于一个新建控件,这个属性包含为0的宽与高的尺寸。

2.14 QSize baseSize() const

获取控件的基础尺寸。

2.15 void setBaseSize(int basew, int baseh)

设置当前控件的基础尺寸宽为basew,高为baseh。

2.16 void setSizeIncrement(const QSize &)

sizeIncrement : QSize 该属性存储了控件的尺寸增量
当用户调整窗口大小,尺寸大小将按照尺寸增量属性设置的大小作为步长改变。宽度改变步长为sizeIncrement().width(),高度改变步长为sizeIncrement.height(),baseSize()作为基础尺寸。设置控件尺寸为非负整数i,j:
调整后的宽度为width = baseSize().width() + i * sizeIncrement().width();
调整后的高度为height = baseSize().height() + j * sizeIncrement().height();
当为所有的控件设置尺寸增量时,该属性仅影响窗口控件。
默认情况下,该属性包含一个高度和宽度都为0的尺寸。
在windows系统下尺寸增量不起作用,可能在X11的窗口管理器中被忽略掉了。

2.17 void setSizeIncrement(int w, int h)

设置当前控件的尺寸增量宽为w,高为h。

2.18 QSize sizeIncrement() const

获取窗口尺寸增量。

2.19 void setContentsMargins(int left, int top, int right, int bottom)

(1)功能说明
设置控件窗口边框与内容的边距,包含左、上、右、下四个边距。边距被用于布局系统(边距设置只有在布局上才起效),也可能会被用于在子类中指定区域进行绘制。
(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 slottest1();
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
#include<qpushbutton.h>
#include<qlayout.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::slottest1);
}
QtGuiAppTest::~QtGuiAppTest()
{
}
void QtGuiAppTest::slottest1()
{
    ui.gridLayout_2->setContentsMargins(50, 50, 50,  50);
}

2.20 void setContentsMargins(const QMargins &margins)

重载函数,详见2.19节。

2.21 QRect QWidget::contentsRect() const

返回控件边框包括的内部区域。

2.22 QMargins QWidget::contentsMargins() const

返回控件的内容边距(获取到通过setContentsMargins设置的值)。

2.23 void setContextMenuPolicy(Qt::ContextMenuPolicy policy)

(1)功能说明
属性contextMenuPolicy : Qt::ContextMenuPolicy,表示控件如何展示上下文菜单(右键菜单),默认值是Qt::DefaultContextMenu,这个枚举值表示contextMenuEvent()函数将被调用。使用Qt::CustomContextMenu,将发出信号customContextMenuRequested()。
Qt::ContextMenuPolicy的枚举值如下:

常量名 常量值 描述
Qt::NoContextMenu 0 设置当前控件没有上下文菜单,对于上下文菜单的处理推到其父节点
Qt::PreventContextMenu 4 当前控件没有上下文菜单,与Qt::NoContextMenu相反,菜单的处理没有推到控件的父节点,这意味着所有鼠标右键事件通过QWidget::mousePressEvent()和QWidget::mouseReleaseEvent()被传递到控件本身
Qt::DefaultContextMenu 1 控件的QWidget::contextMenuEvent()被调用,使用控件的默认菜单
Qt::ActionsContextMenu 2 控件展示本身的action作为上下文菜单,按照action插入的顺序展示
Qt::CustomContextMenu 3 控件发送QWidget::customContextMenuRequested()信号,通过槽函数实现自定义上下文菜单

(2)效果展示
1)Qt::ActionsContextMenu用例
其中widget主界面是通过添加action,并设置Qt::ActionsContextMenu,创建的右键菜单。而textbrowser展示的是默认的右键菜单。
在这里插入图片描述

2)Qt::NoContextMenu用例
将上一用例中的textbrowser通过Qt::NoContextMenu指定为无上下文菜单,其他不变,效果如下
在这里插入图片描述
可见,如果设置textbrowser为NoContextMenu,textbrowser的右键菜单变为主界面的右键菜单,即textbrowser将右键事件传递给了其父类对象的主窗口,主窗口弹窗菜单在textbrowser的界面上。
3)Qt::PreventContextMenu用例
在这里插入图片描述
其中textbrowser为继承qtextbrowser的自定义控件。当设置为PreventContextMenu时,在qtextbrowser上点击右键可以看到不会再弹出父窗口的右键菜单,即点击事件不会传递到父节点中。用户可以在自定义text browser中实现右键动作。

4)Qt::DefaultContextMenu用例
将用例3)中的自定义textbrowser控件设置为默认上下文菜单,效果如下
在这里插入图片描述

5)Qt::CustomContextMenu用例
在这里插入图片描述

(3)调用程序
1)Qt::ActionsContextMenu用例

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //给主界面添加右键菜单
    QAction* pact = new  QAction(QString::fromLocal8Bit("帮助"), this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("链接"),  this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("刷新页面"), this);
    this->addAction(pact);
    //设置主界面右键菜单策略
    this->setContextMenuPolicy(Qt::ActionsContextMenu);
}

2)Qt::NoContextMenu用例

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    :  QWidget(parent)
{
    ui.setupUi(this);
    //给主界面添加右键菜单
    QAction* pact = new   QAction(QString::fromLocal8Bit("帮助"), this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("链接"),  this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("刷新页面"), this);
    this->addAction(pact);
    //设置主界面右键菜单策略
    this->setContextMenuPolicy(Qt::ActionsContextMenu);
    //设置textBrowser控件右键菜单策略
     ui.textBrowser->setContextMenuPolicy(Qt::NoContextMenu);
}

3)Qt::PreventContextMenu用例
QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
#include<qtextbrowser.h>
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent  = Q_NULLPTR);
    ~QtGuiAppTest();
private:
    Ui::QtGuiAppTestClass ui;
};
//自定义TextBrowser控件
class MyTextBrowser : public QTextBrowser
{
public:
    MyTextBrowser(QWidget* parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
#include<qaction.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //创建自定义text browser控件
    QTextBrowser* pTextBro = new MyTextBrowser(this);
    pTextBro->resize(300, 300);
    //设置text browser控件的右键菜单策略
     pTextBro->setContextMenuPolicy(Qt::PreventContextMenu);
    //给主界面添加右键菜单
    QAction* pact = new   QAction(QString::fromLocal8Bit("帮助"), this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("链接"),  this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("刷新页面"), this);
    this->addAction(pact);
    //设置主界面右键菜单策略
    this->setContextMenuPolicy(Qt::ActionsContextMenu);
}
QtGuiAppTest::~QtGuiAppTest()
{
}
MyTextBrowser::MyTextBrowser(QWidget* parent):  QTextBrowser(parent)
{
}
//接收鼠标按下事件
void MyTextBrowser::mousePressEvent(QMouseEvent* event)
{
    this->append(QString::fromLocal8Bit("鼠标按下事件"));
    QTextBrowser::mousePressEvent(event);
}
//接收鼠标释放事件
void MyTextBrowser::mouseReleaseEvent(QMouseEvent*  event)
{
    this->append(QString::fromLocal8Bit("鼠标释放事件"));
    QTextBrowser::mouseReleaseEvent(event);
}

4)Qt::DefaultContextMenu用例

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
        //创建自定义text browser控件
    QTextBrowser* pTextBro = new MyTextBrowser(this);
    pTextBro->resize(300, 300);
    //设置text browser控件的右键菜单策略
     pTextBro->setContextMenuPolicy(Qt::DefaultContextMenu);
    //给主界面添加右键菜单
    QAction* pact = new   QAction(QString::fromLocal8Bit("帮助"), this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("链接"),  this);
    this->addAction(pact);
    pact = new QAction(QString::fromLocal8Bit("刷新页面"), this);
    this->addAction(pact);
        //设置主界面右键菜单策略
    this->setContextMenuPolicy(Qt::ActionsContextMenu);
}

其他部分与3)相同
5)Qt::CustomContextMenu用例
QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
#include<qtextbrowser.h>
#include<qmenu.h>
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
    ~QtGuiAppTest();
public slots:
    void SlotTestContextMenu(const QPoint& pos);
private:
    Ui::QtGuiAppTestClass ui;
    //自定义菜单
    QMenu* m_pMenu;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
#include<qaction.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    :  QWidget(parent)
{
        //设置右键菜单策略
    this->setContextMenuPolicy(Qt::CustomContextMenu);
        //链接自定义右键菜单信号与槽函数
    connect(this,  &QtGuiAppTest::customContextMenuRequested, this,  &QtGuiAppTest::SlotTestContextMenu);
    //创建自定义菜单
    m_pMenu = new QMenu(this);
    m_pMenu->addAction(new  QAction(QString::fromLocal8Bit("自定义1"), this));
    m_pMenu->addAction(new  QAction(QString::fromLocal8Bit("自定义2"), this));
    m_pMenu->addAction(new  QAction(QString::fromLocal8Bit("自定义3"), this));
}
QtGuiAppTest::~QtGuiAppTest()
{
}
//槽函数,在右键点击位置显示自定义菜单
void QtGuiAppTest::SlotTestContextMenu(const QPoint&  pos)
{
    m_pMenu->exec(this->mapToGlobal(pos));
}

2.24 void setCursor(const QCursor &)

(1)功能说明
属性cursor : QCursor,持有当前控件的光标形状
鼠标光标在当前控件上时将呈现此形状。预定义光标对象列表(list of predefined cursor objects)定义了一系列有用的光标形状。
预定义光标对象列表定义如下

常量名 常量值 描述
Qt::ArrowCursor 0 在这里插入图片描述标准箭头标准箭头
Qt::UpArrowCursor 1 在这里插入图片描述向上指向屏幕顶部的箭头
Qt::CrossCursor 2 在这里插入图片描述十字准线光标,通常用于帮助用户准确选择屏幕上的点
Qt::WaitCursor 3 在这里插入图片描述沙漏光标或监视光标,通常在阻止用户与应用程序交互的操作期间显示
Qt::IBeamCursor 4 在这里插入图片描述插入符号或工字光标,表示控件可以接受和显示文本输入
Qt::SizeVerCursor 5 在这里插入图片描述用于垂直调整顶层窗口大小的光标
Qt::SizeHorCursor 6 在这里插入图片描述用于水平调整顶层窗口大小的光标
Qt::SizeBDiagCursor 7 在这里插入图片描述用于在右上角和左下角对角线调整顶层窗口大小的光标
Qt::SizeFDiagCursor 8 在这里插入图片描述用于在左上角和右下角对角调整顶层窗口大小的光标
Qt::SizeAllCursor 9 在这里插入图片描述用于在任意方向上调整顶层窗口大小的光标
Qt::BlankCursor 10
Qt::SplitVCursor 11 在这里插入图片描述用于垂直分割的光标,可以水平着拖动把手以调整可用空间的大小
Qt::SplitHCursor 12 在这里插入图片描述用于水平分割的光标,可以垂直着拖动把手以调整可用空间的大小
Qt::PointingHandCursor 13 在这里插入图片描述指向手型光标,通常用于可点击元素
Qt::ForbiddenCursor 14 在这里插入图片描述斜线圆光标,通常在拖放操作期间使用,以指示无法将拖动的内容拖放到特定小组件或某些区域内。
Qt::OpenHandCursor 15 在这里插入图片描述表示张开的手的光标,通常用于指示光标下方的区域是画布的可见部分,用户可以单击并拖动该部分以滚动
Qt::ClosedHandCursor 16 在这里插入图片描述表示闭合手的光标,通常用于指示正在进行涉及滚动的拖动操作。
Qt::WhatsThisCursor 17 在这里插入图片描述带有问号的箭头,通常用于指示控件中存在“what’s this"帮助。
Qt::BusyCursor 18 在这里插入图片描述沙漏光标或监视光标,通常在操作期间显示,允许用户在后台执行时与应用程序进行交互
Qt::DragMoveCursor 19 拖动项目时通常使用的光标
Qt::DragCopyCursor 20 拖动项目进行复制时通常使用的光标
Qt::DragLinkCursor 21 拖动项目以创建指向该项目的链接时通常使用的光标
Qt::BitmapCursor 24

如果没有设置光标,或者设置完之后调用了unsetCursor(),将使用父节点的光标形状。
默认情况下,该属性包含一个标准箭头的光标形状
如果光标离开控件,即使鼠标被抓取,某些底层窗口实现也会重置光标。如果想将光标设置到所有控件,可以考虑使用QGuiApplication::setOverrideCursor()
(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 SlotTestCursorShape(int nShape);
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    :  QWidget(parent)
{
    ui.setupUi(this);
    connect(ui.comboBox,  QOverload<int>::of(&QComboBox::currentIndexChanged),  this,
            &QtGuiAppTest::SlotTestCursorShape);
}
QtGuiAppTest::~QtGuiAppTest()
{
}
void QtGuiAppTest::SlotTestCursorShape(int nShape)
{
    QCursor pcrs;
    pcrs.setShape((Qt::CursorShape)nShape);
    this->setCursor(pcrs);
}

2.25 void unsetCursor()

取消对光标的设置。

2.26 QCursor cursor() const

获取光标信息。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐