QWidget

QWidget类是所有用户界面对象的基类.

属性

  • acceptDrops : bool      - 窗口部件中拖拽事件是否有效,设置为true会向系统通知此窗口小部件可能能够接受放置事件
  • accessibleDescription : QString     - 控件说明(通过一些辅助技术工具才可见),默认为空。
  • accessibleName : QString     - 窗口部件名称(通过一些辅助技术工具才可见)
  • autoFillBackground : bool     窗口部件背景是否自动填充
  • baseSize : QSize     窗口部件的基本大小
  • childrenRect : const QRect     窗口部件的子对象的边界矩形,隐藏的子对象被排除在外。
  • childrenRegion : const QRegion     窗口部件的子对象所占用的组合区域,隐藏的子对象被排除在外。
  • contextMenuPolicy : Qt::ContextMenuPolicy     窗口部件如何显示上下文菜单
  • cursor : QCursor     窗口部件的光标外形
  • enabled : bool     窗口部件是否有效
  • focus : const bool     窗口部件(或者它的焦点代理)是否得到键盘输入焦点
  • focusPolicy : Qt::FocusPolicy     窗口部件接收键盘焦点的策略
  • font : QFont     窗口部件当前的字体集
  • frameGeometry : const QRect     窗口部件相对于其父级的几何形状,包括任何窗口框架
  • frameSize : const QSize     窗口部件的大小,包括任何窗口框架
  • fullScreen : const bool     窗口部件是否以全屏模式显示
  • geometry : QRect     窗口部件相对于其父窗口的几何图形,并排除窗口框架
  • height : const int     不包括窗口框架的窗口部件的高度
  • inputMethodHints : Qt::InputMethodHints     具体的输入方法提示小部件具有什么
  • isActiveWindow : const bool     窗口部件或者它的一个子对象是否是活动窗口
  • layoutDirection : Qt::LayoutDirection     窗口部件的布局方向
  • locale : QLocale     窗口部件的区域设置
  • maximized : const bool     窗口部件是否已最大化
  • maximumHeight : int     窗口部件的最大高度(以像素为单位)
  • maximumSize : QSize     窗口部部件的最大大小(以像素为单位)
  • maximumWidth : int     窗口部件的最大宽度(以像素为单位)
  • minimized : const bool     窗口部件是否最小化(图标化)
  • minimumHeight : int     窗口部件的最小高度(以像素为单位)
  • minimumSize : QSize     窗口部件的最小大小
  • minimumSizeHint : const QSize     建议的窗口部件最小大小
  • minimumWidth : int     窗口部件的最小宽度(以像素为单位)
  • modal : const bool     窗口部件是否为模式窗口
  • mouseTracking : bool     窗口部件跟踪鼠标是否生效
  • normalGeometry : const QRect     窗口部件的几何图形,因为它在显示为普通(非最大化或全屏)顶级窗口部件时将显示
  • palette : QPalette     窗口部件的调色板
  • pos : QPoint     窗口部件在它的父窗口部件中的位置
  • rect : const QRect     不包含任何窗口框架的窗口部件的内部几何形状
  • size : QSize     不包含任何窗口框架的窗口部件的大小
  • sizeHint : const QSize     - 建议的窗口部件大小
  • sizeIncrement : QSize     窗口部件的大小增量
  • sizePolicy : QSizePolicy     窗口部件的默认布局行为
  • statusTip : QString     窗口部件的状态提示
  • styleSheet : QString     窗口部件的样式表
  • tabletTracking : bool     窗口部件是否启用了平板电脑跟踪
  • toolTip : QString     窗口部件的工具提示
  • toolTipDuration : int     窗口部件的工具提示持续时间(以毫秒为单位)。如果值为-1(默认值),则根据工具提示的长度计算持续时间。
  • updatesEnabled : bool     更新是否生效
  • visible : bool     窗口部件是否可视
  • whatsThis : QString     窗口部件的“这是什么”帮助文本
  • width : const int     不包含任何窗口框架的窗口部件宽度
  • windowFilePath : QString     窗口部件关联的文件路径
  • windowFlags : Qt::WindowFlags     窗口标志
  • windowIcon : QIcon     窗口部件的图标
  • windowModality : Qt::WindowModality     哪个窗口被模态部件阻塞
  • windowModified : bool     窗口中显示的文档是否有未保存的更改
  • windowOpacity : double     窗口的不透明度级别
  • windowTitle : QString     窗口标题
  • x : const int     窗口部件相对于其父窗口的x坐标,包括任何窗口框架
  • y : const int     窗口部件相对于其父窗口的y坐标,并包括任何窗口框架

公共函数

boolacceptDrops() const
voidsetAcceptDrops(bool on)

设置窗体是否支持拖拽属性。声明dragEnterEvent和dropEvent事件函数,对窗口的拖拽行为进行处理。

QStringaccessibleDescription() const
voidsetAccessibleDescription(const QString &description)

控件的说明描述(通过一些辅助技术工具才可见),默认为空。

QStringaccessibleName() const
voidsetAccessibleName(const QString &name)

控件名称,默认为空。

PS: 作者只正确实现函数调用逻辑,但未真正验证其函数的功能,通过网上搜索得知 accessibleDescription  和 accessibleName 皆是为了方便一些需要通过辅助浏览工具(如TalkBack)的人正常使用应用程序功能。

boolautoFillBackground() const
voidsetAutoFillBackground(bool enabled)

    这个属性决定QWidget的背景色是否自动填充,默认是false。如果bool为true,这个属性会在QWidget触发PaintEvent之前引起Qt填充QWidget的背景色,填充的颜色是由widget的QPalette::window颜色角色所决定的,如果bool为false,QWidget会使用从父类传递来的“默认”背景色。网上也有说法setAutoFillBackground可以解释为QWidget是否从父窗体继承背景色。
    如果该widget没有设置WA_OpaquePaintEvent属性或者WA_NoSystemBackground属性,windows总是会使用QPalette::window颜色角色。
    如果widget的父窗口有渐变的背景色填充,那么这个属性是不能设置为false。
   混合使用此属性和Qt style sheet的时候需要注意,当一个widget拥有一个style sheet设置的背景色或者border-image,那么autoFillBackground属性自动关闭。

QSizebaseSize() const
voidsetBaseSize(const QSize &)
voidsetBaseSize(int basew, int baseh)

     设置窗体的基本大小。

Qt::ContextMenuPolicycontextMenuPolicy() const
voidsetContextMenuPolicy(Qt::ContextMenuPolicy policy)

其设置枚举类型有Qt::DefaultContextMenuQt::ActionsContextMenu, Qt::CustomContextMenuQt::NoContextMenuQt::PreventContextMenu

Qt::DefaultContextMenu是默认值,利用右键菜单事件contextMenuEvent( QContextMenuEvent * event )函数做处理。

使用Qt::CustomContextMenu时,会触发customContextMenuRequested ( const QPoint & pos )信号,仅仅只是发信号,所以需要自己写显示右键菜单的slot。

Qt::ActionsContextMenu会把部件的所有action即QWidget::actions()作为context menu显示出来

 Qt::NoContextMenuQt::PreventContextMenu不显示上下文菜单。

QCursorcursor() const
voidsetCursor(const QCursor &)
voidunsetCursor()

设置控件内光标形状,当鼠标经过这个小部件时,鼠标光标将会呈现设定的形状。光标形状查看Qt::CursorShape 。

如果光标离开小部件,即使抓住鼠标,一些底层窗口实现也会重置光标。如果要为所有窗口小部件设置游标,或在窗口外,请考虑使用QApplication :: setOverrideCursor函数。

boolisEnabled() const
voidsetEnabled(bool)

设置控件是否启用或禁用。

Qt::FocusPolicyfocusPolicy() const
voidsetFocusPolicy(Qt::FocusPolicy policy)

设置控件接受键盘焦点方式。如果控件需要处理键盘事件,则必须为窗口控件启用键盘焦点。焦点策略查看Qt :: FocusPolicy

focusInEvent()接受窗口控件的收到键盘焦点事件

focusOutEvent()接受窗口控件的丢失键盘焦点事件。

focusNextChild()将焦点传递到序列下一个窗口控件,适用于Tab方式。成功返回true,否则返回false.

focusPreviousChild() 将焦点切换到前一个窗口控件,适用于Shift + Tab

focusNextPrevChild(bool) 将焦点切换到新的窗口控件,适用于TabShift + Tab。如果传参为true,则函数向前搜索,如果传参为false, 则向后搜索。

#pragma once

#include <QtWidgets/QWidget>
#include <QtGui>
#include <QMenu>
#include "ui_QtWidget.h"

class QtWidget : public QWidget
{
	Q_OBJECT

public:
	QtWidget(QWidget *parent = Q_NULLPTR);

protected:
	void dragEnterEvent(QDragEnterEvent *event);
	void dragLeaveEvent(QDragLeaveEvent *event);
	void dragMoveEvent(QDragMoveEvent *event);
	void dropEvent(QDropEvent *event);

public slots:
	void onActions();
	void onContext(const QPoint& ps);
	void onPushButtonClick();
	void onPushButton2Click();

private:
	Ui::QtWidgetClass ui;
};
#include "QtWidget.h"

QtWidget::QtWidget(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	bool isDrops = this->acceptDrops();
	isDrops = true;
	this->setAcceptDrops(isDrops);
	QString desc = this->accessibleDescription();
	this->setAccessibleDescription(QString::fromLocal8Bit("一个用来理解QWidget属性的应用程序。")); 	
	QString name = this->accessibleName();
	this->setAccessibleName(QString::fromLocal8Bit("QWidget属性应用程序。"));
	this->setAutoFillBackground(true);
	bool isFill = this->autoFillBackground();
	QPalette p;
	p.setBrush(this->backgroundRole(), QBrush(QColor(51, 51, 51)));
	this->setPalette(p);
	this->setContextMenuPolicy(Qt::ActionsContextMenu);
	{
		QAction *a1 = new QAction("Action1", this);
		QAction *a2 = new QAction("Action2", this);
		connect(a1, SIGNAL(triggered(bool)), this, SLOT(onActions()));
		connect(a2, SIGNAL(triggered(bool)), this, SLOT(onActions()));
		this->addAction(a1);
		this->addAction(a2);
	}
	this->setContextMenuPolicy(Qt::CustomContextMenu);
	connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(onContext(const QPoint&)));//
	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onPushButtonClick()));
	connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(onPushButton2Click()));
	this->setCursor(Qt::CrossCursor);
	this->setFocusPolicy(Qt::StrongFocus);
}
void QtWidget::onPushButtonClick()
{
	bool result = this->focusNextChild();
}
void QtWidget::onPushButton2Click()
{
	bool result = this->focusPreviousChild();
}
void QtWidget::onActions()
{
	QAction* ac = qobject_cast<QAction*>(sender());
	if (!ac) return;
	qDebug() << ac->text().toStdString().c_str();
}


void QtWidget::onContext(const QPoint& ps)
{
	QMenu *menu2 = new QMenu(this);
	QAction * _qa1 = menu2->addAction(QString::fromLocal8Bit("--子项1"));
	menu2->exec(QCursor::pos());
}
/* 当拖动正在进行时,这个事件处理器会被调用,而鼠标进入这个控件。*/
void QtWidget::dragEnterEvent(QDragEnterEvent *event)
{
	// 判断拖拽文件类型
	if (event->mimeData()->hasFormat("text/uri-list"))
	{
		event->acceptProposedAction();  //接受该动作
	}
	else
	{
		event->ignore();  //忽略或不处理后,将不会接受到后续的dragMoveEvent事件和dragLeaveEvent事件
	}
}
/*当一个拖动正在进行中,鼠标离开这个控件时,它会被调用*/
void QtWidget::dragLeaveEvent(QDragLeaveEvent *event)
{

}
/*当一个拖动正在进行中,光标进入这个控件,光标在这个控件中移动,这个事件处理程序就会被调用*/
void QtWidget::dragMoveEvent(QDragMoveEvent *event)
{
	QPoint point = event->pos();  //鼠标位置
}
/* 拖拽到这个控件中,释放鼠标处理函数  */
void QtWidget::dropEvent(QDropEvent *event)
{
	QList<QUrl> urls = event->mimeData()->urls();
	if (urls.isEmpty())
	{
		return;
	}
	QString fileName = urls.first().toLocalFile();
	if (fileName.isEmpty())
	{
		return;
	}
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值