QT C++(QWidget类及其常见的属性)

1. QWidget类及其常见的属性

QT各种控件都是继承自QWidget类,QWidget类是QT控件体系中通用的部分。

QWidget属性如下图
在这里插入图片描述

常见的QT属性为:

  1. enabled:描述控件是否处于可用状态(禁用状态这个控件不能接受用户输入的事件,其子元素也会被禁用)

    isEnabled():获取控件可用状态

    setEnable():设置控件可用状态

    在这里插入图片描述

  2. geometry:控件左上角位置(相对于父元素)和控件的尺寸

    geometry():获取到控件的位置和尺寸,返回结果为QRect,包含了x,y,width,height

    setGeometry(QRect):设置控件大小位置

    setGeometry(int x, int y, int width, int height):设置控件大小位置

    void Widget::on_pushButtonUp_clicked()
    {
        QRect pos=ui->pushButton->geometry();
        qDebug()<<pos;
        pos.setY(pos.y()-5);
        ui->pushButton->setGeometry(pos);
    }
    

    Window Frame对geometry属性的影响:QT关于位置尺寸提供很多API,有的API位置信息是Widget本体坐上角为原点的(不考虑Window Frame即窗口边框)上述的API都是不考虑Window Frame的。而frameGeometry则考虑了窗口边框

  3. windowTitle:窗口标题

    windowTitle():获取控件窗口标题

    setWindowTitle():设置控件窗口标题

  4. windowIcon:窗口图标,api只能针对顶层窗口使用

    windowIcon():获取到控件的窗口图标,返回QIcon对象(QIcon不支持对象树机制,建议将对象上创建在栈上)

    setWindowIcon(const QIcon&):设置窗口,任务栏图标

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置窗口图标
        QIcon icon("../test.jpg");
        this->setWindowIcon(icon);
    }
    

    在这里插入图片描述

    qrc机制:确保图片所在的路径在用户机器上存在,且不会被用户删除。
    给QT引入一个.qrc(xml)文件,在这个文件中将图片资源导入进来,并在xml中记录。后续QT编译时会将图片内容的二进制数据,将这些二进制数据转化为C++代码,最终编译到exe文件中。但是qrc无法导入太大的资源文件。当程序运行后程序被加载到内存上

    qrc使用:

    • 创建一个qrc文件

      在这里插入图片描述

    • 将图片导入到qrc中:先创建前缀prefix(虚拟目录)然后导入图片到prefix(虚拟路径)下

      在这里插入图片描述

      导入的图片时图片位置必须在.qrc的同级目录或者子目录下
      在这里插入图片描述
      在这里插入图片描述
      在项目中使用自定义的prefix,虚拟路径即可访问到图片了。路径上带:即可

      Widget::Widget(QWidget *parent)
          : QWidget(parent)
          , ui(new Ui::Widget)
      {
          ui->setupUi(this);
          //通过导入的资源访问
          QIcon icon(":/test.jpg");
          this->setWindowIcon(icon);
      }
      
      
  5. windowOpacity属性:窗口透明度 1.0: 完全不透明 0.0: 完全透明

    windowOpacity():获得窗口透明度

    setWindowOpacity():设置窗口不透明度

    void Widget::on_AddButton_clicked()
    {
        float opacity=this->windowOpacity();
        if(opacity>=1.0){
            return;
        }
        qDebug()<<"opacity: "<<opacity;
        this->setWindowOpacity(opacity+0.1);
    }
    

    根据打印的窗口的不透明度的值可知,窗口不透明变化并不是0.1这样的精确变化的。因为浮点数的存储在机器中不是精确的

  6. cursor属性:修改窗口光标样式

    cursor():获取到当前窗口的光标属性,返回QCursor对象,当光标悬停到该窗口上时会显示对应的形状

    setCursor(const QCursor&):设置该窗口的光标样式,只在鼠标在该窗口上生效。

    QGuiApplication::setOverrideCursor(const QCursor&):设置全局光标属性,对整个程序中的所有窗口都生效,覆盖setCursor设置的属性

    在这里插入图片描述

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QCursor cursor(Qt::WaitCursor);//设置按钮为等待图标
        ui->pushButton->setCursor(cursor);
    }
    

    Qt通过自定义图片设定光标:和设置窗口图标方式一致,把图片导入项目中(.qrc管理),在代码处访问到这个图片,通过这个图片构造光标对象并设置。 QPixmap这个对象就代表一个图片。如果选择图片的图片尺寸比较大,可以进行缩放。(图标资源可以搜索阿里巴巴矢量图标库)

    注意:自定义图片默认情况点击是图片左上角位置点击,可以修改点击生效位置。

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置这个窗口光标为自定义图片
        QPixmap pixmap(":/cursor.png");
        //对图片进行缩放为50×50
        pixmap=pixmap.scaled(50,50);
        //构造光标对象
        QCursor my_cursor(pixmap,10,10);//10,10代表鼠标点击生效位置,图片左上角默认为0,0
        this->setCursor(my_cursor);
    }
    
  7. font属性:窗口字体属性

    font():获取当前窗口的字体信息,返回QFont对象

    setFont(const QFont&font):设置当前窗口的字体信息

     QFont属性:
     - family:字体家族,eg:宋体,微软雅黑等
     - pointSize:文字大小,单位是像素
     - weight:文字粗细,0-99,数字越大越粗
     - bold:是否加粗
     - italic:是否倾斜
     - underline:是否有下划线
     - strikeOut:是否带有删除线
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QLabel* label=new QLabel(this);
        label->setText("文本样式");
        QFont font;
        font.setFamily("仿宋");
        font.setPixelSize(30);
        font.setBold(true);
        font.setItalic(true);
        font.setUnderline(true);
        font.setStrikeOut(true);
        label->setFont(font);
        label->move(10,10);
    }
    

    在这里插入图片描述

  8. toolTip属性:设置窗口悬停时的说明

    setToolTip:设置toolTip,鼠标悬停在该窗口会有提示说明

    setToolTipDuration:设置toolTip显示时间,单位ms。超时后toolTip会自动消失

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置按钮的toolTip
        ui->Yes->setToolTip("按钮说明yes");
        ui->Yes->setToolTipDuration(1000);
    }
    
  9. focusPolicy:设置控件获取到焦点的策略,例如某个控件能否被鼠标选中,或者能否被tab选中

    focusPolicy():获取这个窗口的focusPolicy,返回Qt::FocusPoliy

    setFocusPolicy():设置窗口的focusPolicy

     注意:Qt::FocusPoliy是一个枚举类型,取值如下
     - Qt::NoFocus:控件不会接受键盘焦点
     - Qt::TabFocus:控件可以接受tab键焦点
     - Qt::ClickFocus:控件在鼠标点击时接受焦点
     - Qt::StrongFocus:控件在鼠标点击,tab键时接受焦点(默认)
     - Qt::WheelFocus:控件在点击,tab键,鼠标滚轮时获得焦点
    

    在这里插入图片描述

  10. styleSheet属性:样式表,通过QSS设置窗口样式。
    在这里插入图片描述
    QSS和CSS类似,设置样式使用键值对的形式

    键与值之间使用:分割,键值对之间用;分割
    在这里插入图片描述

    在这里插入图片描述

    //切换窗口样式
    void Widget::on_pushButton_clicked()
    {
        //获取当前窗口样式
        QString str=this->styleSheet();
        qDebug()<<str;
        if(str!="background-color: black;"){
            //设置窗口样式
            this->setStyleSheet("background-color: black;");
            //设置输入框的样式
            ui->textEdit->setStyleSheet("background-color: black; color:white");
            //设置按钮样式
            ui->pushButton->setStyleSheet("color:white");
        }else{
            //设置窗口样式
            this->setStyleSheet("background-color: rgb(240,240,240);");
            //设置输入框的样式
            ui->textEdit->setStyleSheet("background-color: rgb(240,240,240); color:black");
            //设置按钮样式
            ui->pushButton->setStyleSheet("color:black");
        }
    }
    
  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值