Qt Widget控件属性详解
1. QWidget可以在Qt Creator 右侧看到 QWidget 的各种属性2 QWidget常用属性2.1 enabled描述了一个控件是否”可用“状态相对于”禁用“禁用该控件不能接收任何用户的输入事件并且外观上是灰色的如果一个 widget 被禁用则该 widget 的子元素也被禁用isEnabled获取到控件的可用状态setEnabled设置控件是否可用true 表示可用false 表示禁用禁用状态切换voidWidget::on_pushButton_clicked(){qDebug()执行了槽函数;}voidWidget::on_pushButton_enable_clicked(){// 切换第一个按钮的禁用状态// 1.先获取第一个按钮当前的可用状态boolenableui-pushButton-isEnabled();if(enable){ui-pushButton-setEnabled(false);}else{ui-pushButton-setEnabled(true);}}2.2 geometry几何geometry()获取控件的位置和尺寸返回一个QRect包含xywidthheightQPoint表示一个点只有xyQRect表示一个矩形有xywidthheight都是小对象里面的属性很少占用空间也小通常会传值来传递参数setGeometry(QRect)/setGeometry(int x,int y,int width,int height)设置控件位置和尺寸voidWidget::on_pushButton_up_clicked(){// 获取到 target 本身的 geometryQRect rectui-pushButton_target-geometry();qDebug()rect;// 修改 target 坐标// rect.setY(rect.y()-5);// ui-pushButton_target-setGeometry(rect);ui-pushButton_target-setGeometry(rect.x(),rect.y()-5,rect.width(),rect.height());}pressed鼠标按下时触发。点击鼠标分为按下和抬起两步// 鼠标按下未抬起时voidWidget::on_pushButton_2_pressed(){// 点击这个按钮就把这个按钮挪走// 可以通过生成随机数的方式来确定按钮的新位置// 获取当前窗口尺寸intwidththis-geometry().width();intheightthis-geometry().height();// 重新生成按钮的位置intxrand()%width;intyrand()%height;// 移动按钮位置ui-pushButton_2-move(x,y);}2.3 window frame 窗口框架在 Qt 中关于位置尺寸提供了很多的 API考虑 window frame以 window frame 左上角为原点frameGeometry()setFrameGeometry()不考虑 window frame以 Widget 左上角为原点geometry()setGeometry()2.4 windowTitle只能针对顶层窗口这样的 QWidget 才有效windowTitle()获取控件的窗口标题setWindowTitle(const QString title)设置控件的窗口标题2.5 windowIcon类似于 windowTitle针对顶层窗口才有效windowIcon()获取到控件的窗口图标返回 QIcon图标 对象setWindowIcon(const QIcon icon)设置控件的窗口图标路径不要带中文使用 / 或 \\ 作为路径分隔使用相对路径优先在栈上创建图标 QIcon 自身是一个比较小的对象创建出来之后就是要设置到某个 QWidget 里面。QIcon 对象本身是否释放影响图标最终的显示2.5.1 qrc机制qrc 机制把外部文件“打包”进程序里从根本上解决两个问题确保图片所在的路径在目标用户机器上存在确保图片不会被用户搞没了缺点无法导入太大的资源文件本质把 图片 的二进制数据转成 C 代码2.5.1.1 创建qrc文件在项目中创建一个 qrc 文件文件名不要带中文和特殊符号2.5.1.2 添加资源文件创建一个”前缀“Prefix所谓的前缀可以理解为虚拟的目录是Qt自己抽象出来的点击”添加前缀“之后把前缀变为 / 即可把刚才的图片导入到资源文件中要求导入的资源文件必须在 resource.qrc 文件的同级目录或者同级目录的子目录里2.5.1.3 使用qrc中资源文件当代码中需要访问 qrc 中管理的文件时就需要在路径上带有:前缀文件名2.6 windowOpacity透明效果初始默认值为1windowOpacity()获取控件的不透明数值返回float取值为0.0-1.00.0全透明1.0完全不透明setWindowOpacity(float n)设置控件不透明度voidWidget::on_pushButton_add_clicked(){floatopacitythis-windowOpacity();if(opacity1.0)return;qDebug()opacity;opacity0.1;this-setWindowOpacity(opacity);}voidWidget::on_pushButton_sub_clicked(){floatopacitythis-windowOpacity();if(opacity0)return;qDebug()opacity;opacity-0.1;this-setWindowOpacity(opacity);}两个问题透明度变化并非是精准的浮点数用二进制和科学计数法表示分为符号位有效数字指数部分小数有效数字每一位代表的分别是0.50.250.125有的数字凑不出来优点运算速度快占用空间小缺点有些小数无法精确表示平时写代码不要比较直接用 比较两个浮点数作差判断绝对值是否符合预期范围算钱或精度高的地方慎用 float/double上述代码在进行设置前先判定了 opacity 的范围然后再决定是否设置。这个判定其实可以不写为啥我们仍然要写上防御性编程别人犯错了不会对我们自身构成太大的伤害2.7 cursor鼠标样式cursor()获取当前 widget 的 cursor 属性返回 QCursor 对象当鼠标悬停在该 widget 上时就会显示出对应的形状setCursor(const QCursor cursor)设置该 widget 光标的形状仅在鼠标停留在该 widget 上时生效上面两个是 Widget 级别的同一个界面中不同的控件可以设置成不同的光标QGuiApplication::setOverrideCursor(const QCursor cursor)设置全局光标的形状对整个程序中的所有 widget 都会生效覆盖上面的 setCursor 设置的内容Qt 允许通过自定义的图片来设置光标Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui-setupUi(this);// 访问到图片文件QPixmappixmap(:/12.png);pixmappixmap.scaled(50,50);//缩放图片// 构造光标对象// 默认情况下鼠标点击时相当于图片的左上角在进行点击QCursorcursor(pixmap,10,10);// 10,10 以图片左上角为00原点找到1010这个位置作为鼠标真正点击位置// 把光标设置进去this-setCursor(cursor);}2.8 font字体font()获取当前 widget 的字体信息返回 QFont 对象setFont(const QFront font)设置当前 widget 字体信息2.9 toolTip当把鼠标悬停到一个控件的时候就能弹出一个提示setToolTip设置 toolTip提示内容setToolTipDuration设置 toolTip 提示的时间单位 ms时间到后提示消失Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui-setupUi(this);//设置两个按钮的tooltipsui-pushButton_yes-setToolTip(yes);ui-pushButton_yes-setToolTipDuration(2000);ui-pushButton_no-setToolTip(no);ui-pushButton_no-setToolTipDuration(2000);}2.10 focusPolicy焦点指的是能选中某个单位接下来的操作就都是针对该焦点元素进行了一个控件获取到焦点主要是两种方式鼠标点击键盘的tabfocusPolicy()获取该 widget 的 focusPolicy返回 QtFocusPolicysetFocusPolicy(Qt::FocusPolicy policy)设置 widget 的 focusPolicyQt::FocusPolicy是一个枚举类型取值如下Qt::NoFocus控件不会接收键盘焦点像 label 这种Qt::TabFocus控件可以通过Tab键接收焦点Qt::ClickFocus控件在鼠标点击时接收焦点Qt::StrongFocus控件可以通过 Tab 键和鼠标点击接收焦点默认值Qt::WheelFocus类似于 Qt::StrongFpcus同时空间也可以通过鼠标滚轮获取到焦点2.11 styleSheet样式表描述界面具体是啥样子格式键值对键和值之间 : 分隔键值对和键值对之间使用 ; 分隔计算机三原色红蓝绿voidWidget::on_pushButton_light_clicked(){// 设置窗口样式this-setStyleSheet(background-color: rgb(240,240,240););// 设置输入框的样式ui-plainTextEdit-setStyleSheet(background-color: white;color: black);// 设置按钮的样式ui-pushButton_light-setStyleSheet(color: black);ui-pushButton_black-setStyleSheet(color: black);}voidWidget::on_pushButton_black_clicked(){// 设置窗口样式this-setStyleSheet(background-color: black;);// 设置输入框的样式ui-plainTextEdit-setStyleSheet(background-color: black;color: white);// 设置按钮的样式ui-pushButton_light-setStyleSheet(color: white);ui-pushButton_black-setStyleSheet(color: white);}