Qt界面编程03
1、QSS样式表
QSS样式表是模仿CSS样式表一种语言,用于美化界面和控件的。
1、在Qt设计师中设置控件的QSS样式表,右击控件或窗口->改变样式表:
添加资源:使用Qt Createor中的资源文件,一般用于设置图片,控件的背景图,边框图片,内容的图片。
添加渐变:在原有颜色的基本上进行设置。
添加颜色:
color 控件内容的颜色,rgb(红[0~255],绿[0~255],蓝[0~255]),rgba(红[0~255],绿[0~255],蓝[0~255],透明度[0~100]);
background-color 控件的背景色
alternate-background-color 交替背景色
border-color 边框颜色
border-top-color 上边框颜色
border-bottom-color 下边框颜色
border-right-color 右边框颜色
border-left-color 左边框颜色
selection-color 内容被选中后的颜色
selection-background-color 内容被选中后的背景色
border-top-left-radius 设置左上角圆角;
border-top-right-radius 设置右上角圆角;
border-bottom-left-radius 设置左下角圆角;
border-bottom-right-radius 设置右下角圆角;
border-radius 设置四个角圆角;
添加字符:设置内容的字体、字号、下划线、加粗等样式。
2、在代码中获取、设置控件的样式表
QString styleSheet() const; 获取控件的样式表
void setStyleSheet(const QString& styleSheet); 设置控件的样式表
3、在Qt项目中添加图片资源
1、选中项目->添加新文件->Qt->Qt Resource File->选择。
2、给取文件取名字,俗称约定叫src->下一步->完成。
3、双击 资源->src.qrc文件,添加前缀。
4、点击添加按钮->添加文件->选择相关的图片文件。
5、Ctrl+s保存。
练习:实现一个相册功能,使用按钮浏览项目中的图片。
ui->label->setStyleSheet("image: url(:/image/2.jpeg);");
2、样式表的选择器
样式表具有继承的特点,父窗口中如果设置的样式表,那么子控件就会继承父窗口的样式表。
控件挨个设计样式表会很麻烦,我们需要在父窗口中设置样式表给子控件,那么就需要学会使用样式表的选择器,也就是指定某个控件、某类控件使用该样式表。
选择器{样式}
1、通用选择器 *
*{ 样式表; #该样式表对当前控件和所有子控件都有效 }
2、类型选择器
类名 { 样式表; #该样式表对某一类控件有效 }
3、属性选择器
类名[属性=val] { 样式表; #当某一类控件的值某个属性的值为val时,该样式才有效 }
4、ID选择器
类名#对象名{ 样式表; #该样式表对某一类控件中叫xx名字的控件有效 }
5、后代选择器
容器名 控件名{ 样式表; }
6、子选择器
容器名 > 控件名{ 样式表; }
7、伪选择器
控件名:动作{ } 动作: hover 悬停 pressed 按下 checked 选中 unchecked 未被选中 focus 获得焦点 disable 禁用 enable 启动
3、事件
Qt程序在运行过程中,如果用户所做的一些特定动作叫事件(意味着某些事发生了),Qt就会去调用窗口容器的成员函数,只是这些成员函数是虚函数,默认什么都不干。
如果我们继承了窗口容器,并覆盖了这些虚函数,就可以让用户做某动作时,执行相应的功能。
void mousePressEvent(QMouseEvent *); 鼠标单击窗口事件,左右键都可以触发 void mouseReleaseEvent(QMouseEvent *); 鼠标弹起事件 void mouseDoubleClickEvent(QMouseEvent *); 鼠标双击事件 void mouseMoveEvent(QMouseEvent *); 鼠标按下并移动 event->button() 哪个按钮发出的事件 event->x(),event->y(),event->pos() 事件发生的位置 void keyPressEvent(QKeyEvent *); 键盘按下事件,方向键触发不了该事件 void keyReleaseEvent(QKeyEvent *); 键盘弹起事件,方向键可以触发该事件 enum Key 枚举中定义所有按键的枚举值。 event->key() 获取整型的按键值 event->text() 获取字符型的按键值 void focusInEvent(QFocusEvent *); 获得焦点,默认不起作用,需要设置容器的focusPolicy属性。 void focusOutEvent(QFocusEvent *); 失去焦点 void enterEvent(QEvent *); 鼠标进入窗口 void leaveEvent(QEvent *); 鼠标离开窗口 void moveEvent(QMoveEvent *); 窗口移动 void resizeEvent(QResizeEvent *); 窗口大改变 void closeEvent(QCloseEvent *); 关闭窗口 void showEvent(QShowEvent *); 窗口显示 void hideEvent(QHideEvent *); 窗口隐藏
练习:实现Qt版的2048游戏。
2、最高分的保存与加载 3、当前游戏的存档 4、游戏结束时弹出再来一局 QMessageBox
4、Qt中的定时器
注意:Qt界面程序在单进程且单线程的状态下,槽函数必须要快速执行完毕然后把执行权交给Qt,然后Qt才能继续响应界面操作,在槽函数执行期间,界面是无法响应操作的,如果槽函数长时间不结束,界面就会卡住。
如果有长时间、重复性的操作,需要使用定时器来完成。
在Qt中定时器被封装成的QTimer类,它不会发出系统级的信号,而是两种使用方法:
1、信号+槽
1、创建定时器对象
2、绑定信号和槽
3、设置产生信号的时间间隔 setInterval(msecs);
4、启动定义器
start(int msec) 启动定时器,设置产生信号的时间间隔,会覆盖setInterval函数的设置。
start() 启动定时器
5、其它功能
isActive() 获取定时器是否启动
stop() 停止计时器
interval() 获取定时器的产生信号的时间间隔
2、事件
1、继承QTimer类
2、void timerEvent(QTimerEvent *event);
3、创建子类对象,启动并设置时间
4、当定时器超时时,就会调用timerEvent,如果该事件函数被覆盖,就不会再产生超时信号