qt常用控件
widget是qt的核心概念,是qt的控件。
以上都属于控件
qwidget类
属性
enable:决定控件是否能使用
enable的代码
objectName:作为所选中控件名,可手动更改,唯一标识。
geometry
目的:按钮实现对控件的移动和尺寸变化
• x 横坐标
• y 纵坐标
• width 宽度
• height ⾼度
获取控件地址和尺寸
目的:实现用按键实现对控件的移动
需要用QRect的成员函数对坐标更改
成员函数==方法
平移的方法
传入x,y,长,宽来改变
x,y改变位置,长宽改变大小
void Widget::on_pushButton_up_clicked()
{QRect rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(),rect.y()-5,rect.width(),rect.height());//宽度和高度不变意味着控件大小不变,只改变所在位置的值
}void Widget::on_pushButton_down_clicked()
{QRect rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(),rect.y()+5,rect.width(),rect.height());//宽度和高度不变意味着控件大小不变,只改变所在位置的值
}void Widget::on_pushButton_right_clicked()
{QRect rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x()+5,rect.y(),rect.width(),rect.height());//宽度和高度不变意味着控件大小不变,只改变所在位置的值
}void Widget::on_pushButton_left_clicked()
{QRect rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x()-5,rect.y(),rect.width(),rect.height());//宽度和高度不变意味着控件大小不变,只改变所在位置的值
}
qt中提供了许多API,以不同的位置作为源点
不考虑标题栏(geometry),考虑标题栏(framegeometry)
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel *label = new QLabel("Hello",this);//要显示,必须带上this,也就是父控件label->setGeometry(100,10,200,300);QRect rect=label->geometry();//获取label的位置QRect rect2=label->frameGeometry();//获取label的位置,携带标题栏qDebug()<<"label:"<<rect;qDebug()<<"label:"<<rect2;
}
void Widget::on_pushButton_target_clicked()
{QRect rect=this->geometry();//获取target的位置QRect rect2=this->frameGeometry();//获取target的位置,携带标题栏qDebug()<<"target"<<rect;qDebug()<<"target"<<rect2;
}
两者区别的原因是:在构造⽅法中,Widget刚刚创建出来,还没有加⼊到对象树中.此时也就不具备Window frame.
代码实现
windowTitle
作用:对窗口标题做操作,属于QWidget。
应用范围:针对顶层窗口,对输入框和按键无用
如果给按钮设置了窗口标题,程序没报错。
windowlcon
作用:表示窗口的图标,针对顶层窗口使用
用法:将图片的绝对地址放入,但是需要用/替代\防止转义字符。
但是在实际当中不能使用绝对路径,因为不同的路径位置不一样。因此需要在当前路径下或者下一级目录下用文件夹存放,用相对路径解决。也可以用图片转代码的形式存放。
qrc机制
窗口透明度
规定:使用浮点数(二进制科学计数法),浮点数分为符号位、有效数字(二进制,0.5、0.25、0.125)、指数部分。由于float和double有效数字 部分长度有限,因此无法凑出0.1这种数字,导致透明度出现误差。(这套体系速度快但是对于有些小数无法精确标识,因此两个浮点数比较很容易出错,一般用做差,判定差的绝对值小于预期误差范围)
windowOpacity的规则:超过范围,就无法设置进去
API | 说明 |
windowOpacity() | 用于获取当的透明度,范围0.0->1.0 |
setWindowOpacity(float n) | 设置透明度 |
cursor
作用:更改图标效果
cursor():控件显示光标
setcursor:更改光标形状
QGuiApplication:全局光标,不应用与系统
更改cursor
属性更改
代码更改
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setCursor(QCursor(Qt::WaitCursor));//给当前页面设置等待光标
}
系统自带光标种类
enum CursorShape {ArrowCursor,UpArrowCursor,CrossCursor,WaitCursor,IBeamCursor,SizeVerCursor,SizeHorCursor,SizeBDiagCursor,SizeFDiagCursor,SizeAllCursor,BlankCursor,SplitVCursor,SplitHCursor,PointingHandCursor,ForbiddenCursor,WhatsThisCursor,BusyCursor,OpenHandCursor,ClosedHandCursor,DragCopyCursor,DragMoveCursor,DragLinkCursor,LastCursor = DragLinkCursor,BitmapCursor = 24,CustomCursor = 25};
创建对象,不用挂对象树,设置光标。
自定义光标
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPixmap pixmap(":/cat.png");//光标所在地pixmap=pixmap.scaled(64,64);//光标尺寸QCursor q(pixmap,2,2);//创建 QCursor 对象, 并指定 "热点" 为 (2, 2) 坐标位置this->setCursor(q);}
font
作用:获取字体信息
属性修改
代码修改
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* text=new QLabel(this);text->setText("hello");QFont font;font.setFamily("仿宋");//字体样式font.setPointSize(20);//字体大小font.setWeight(30);//字体粗细font.setBold(true);//字体加粗,true weight75,false 为50font.setItalic(true);//倾斜font.setUnderline(true);//下划线font.setStrikeOut(true);//删除线text->setFont(font);}
toolTip
作用:鼠标悬停控件,给出控件详细信息
setToolTip:设置内容
setToolTipduring:设置提示时间长度,单位ms
代码实现:
设置按钮的TOOLTIP,以及它们持续的时间。
focuspolicy
作用:获取焦点,焦点是针对单一控件,独立操作。
获取焦点的实现
焦点获取一般通过tab和鼠标,而qt可以设置控件获取焦点的方法
实现方法
属性
nofocus的不能被操作
但tab操作和单鼠标操作
代码实现
stylesheet
作用:通过css设置widget的样式,界面具体是什么样子。称为QSS
QSS:键值对的方式,键和值用:分隔 每对之间用;分割设置之后,直接应用一套模板
代码实现夜间模式功能
文字白色,背景黑色
日间模式:背景色亮色,文字暗色,先设置窗口的背景颜色,文本框设置白色背景,黑色文字,设置按钮颜色
夜间模式:背景色黑色,文字白色,其余都是这样,先窗口,文本、按钮。背景background-color: 文字 color:
重要的是:单词拼写问题
问题:计算的颜色如何表示,如果用单词设置颜色太少了
RGB表示,屏幕上的像素是包含RGB的小灯泡,用三个字节来表示RGB。因此表示颜色(R,G,B)各自的字节表示
目的:如何设置初始窗口背景,防止太白
用取色器进行对需要的颜色进行RGB取色,然后用rgb(R,G,B)