核心内容摘要
网站污揭秘网络世界的污秽现象
目录
enabled是否可用状态
geometry位置与大小
windowFrame窗口框架
windowTitle窗口标题
windowIcon窗口图标
qrc 资源文件机制
windowOpacity窗口透明度
cursor修改光标
font字体相关
toolTip提示文本
focusPolicy焦点策略
styleSheet样式表仿CSS的QSS
enabled是否可用状态禁用状态控件不接受用户输入如点击。
一个父控件被禁用其所有子控件也会被禁用。
示例用按钮控制另一个按钮的可用状态。
void Widget::on_pushButton_clicked() { this-setWindowTitle(开); } void Widget::on_pushButtonEnabled_clicked() { bool fl ui-pushButton-isEnabled(); if(fl) { ui-pushButton-setEnabled(false); } else { ui-pushButton-setEnabled(true); } }
geometry位置与大小是四个属性的统称x,y左上角坐标widthheight。
QT 将它们封装在一个QRect类里。
注意如果只修改x,y坐标按钮的大小不会改变只是位置移动。
但如果只使用geometry()获取矩形然后修改y坐标并设置回去按钮可能会被拉伸或压缩。
这是因为setY()方法只是改变了矩形的y值而没有保持高度。
正确示例移动按钮。
void Widget::on_up_clicked() { auto rec ui-pushButton-geometry(); ui-pushButton-setGeometry({rec.x(), rec.y()-10, rec.width(), rec.height()}); } void Widget::on_down_clicked() { auto rec ui-pushButton-geometry(); ui-pushButton-setGeometry({rec.x(), rec.y()10, rec.width(), rec.height()}); } void Widget::on_left_clicked() { auto rec ui-pushButton-geometry(); ui-pushButton-setGeometry({rec.x()-10, rec.y(), rec.width(), rec.height()}); } void Widget::on_right_clicked() { auto rec ui-pushButton-geometry(); ui-pushButton-setGeometry({rec.x()10, rec.y(), rec.width(), rec.height()}); }
windowFrame窗口框架在Widget窗口顶端显示“Widget”字母的细条就是windowFrame框架。
有些 API 以窗口客户区不含边框的左上角为(0,
有些则以包含边框的整个窗口左上角为(0,
。
QRect r1 this-geometry(); // 客户区矩形 QRect r2 this-frameGeometry(); // 包含窗口框架的矩形 qDebug() r1; qDebug() r2;注意如果在构造函数中直接打印可能会得到(0,
因为此时窗口的界面可能尚未完全构造出来。
应在按钮事件等窗口显示后再获取。
结果示例QRect(560,264 800x
// geometry QRect(559,219 802x
// frameGeometry可以看出左右各有 1 像素边框上方标题栏高度为 46 像素。
windowTitle窗口标题设置顶层窗口标题栏的文字。
注意只能对顶层窗口如Widget设置对按钮等子控件设置是无效的。
// 错误示例不会生效 QPushButton* q1 new QPushButton(this); q1-setWindowTitle(
;
windowIcon窗口图标设置窗口左上角或任务栏上显示的小图标。
使用QIcon类管理图标。
QIcon q1(d:\\
png); // Windows路径注意转义 this-setWindowIcon(q
;注意点之前按钮等控件通常用指针创建在堆上但QIcon可以直接放在栈上。
原因1按钮等需要确保生命周期与父窗口一致因此需要托管给 QT 的对象树。
原因2QIcon是一个轻量级对象创建并设置给窗口后即使局部QIcon对象析构图标资源已经加载不影响显示。
且QIcon没有setParent方法无法放入对象树。
路径写法可以使用 C11 的原始字符串Raw String避免转义QIcon q1(R(d:\
png));在 QT 中路径分隔符也可以使用/QIcon q1(d:/
png);问题使用绝对路径不灵活因为不同电脑路径不同且图片可能被用户删除。
解决方案使用 QT 的资源文件 (qrc)机制。
qrc资源文件机制QT 资源文件后缀.qrc是一个 XML 文件用于记录项目中的资源如图片。
编译时QT 会将资源文件中的资源数据如图片以二进制形式编译进最终的可执行文件.exe中。
优点程序运行时无需依赖外部文件不会被用户误删。
缺点不适合嵌入过大的文件会导致可执行文件体积膨胀。
使用步骤在项目上右键 - 添加新文件 - QT -Qt Resource File创建.qrc文件。
将图片文件复制到项目目录下通常是.qrc文件同级或子目录。
在 QT Creator 中双击.qrc文件点击“添加”-“添加前缀”再“添加”-“添加文件”选择图片。
https://media/image
png代码中使用QIcon q1(:/
png); // 冒号开头然后是前缀如果设置了和文件名 setWindowIcon(q
;编译后会在构建目录生成一个qrc_*.cpp文件里面包含了资源的二进制数据。
windowOpacity窗口透明度void Widget::on_pushButton_clicked() { // 增加透明度变得更透明 float f this-windowOpacity(); f
1; if (f
1.
f
0; this-setWindowOpacity(f); } void Widget::on_pushButton_2_clicked() { // 减少透明度变得更不透明 float f this-windowOpacity(); f -
1; if (f
0.
f
0; this-setWindowOpacity(f); }
cursor修改光标属性面板修改在 QT Designer 右侧属性编辑器的cursor栏目下方可以直接选择预设光标。
代码修改为预设光标this-setCursor(Qt::WaitCursor); // 设置为等待转圈光标自定义光标图标QPixmap p(:/tu.png); // 加载图片资源 this-setCursor(p); // 设置为光标 // 还可以缩放图片 p p.scaled(10,
;
font字体相关family字体样式如“宋体”、“Arial”。
pointSize字体大小单位是“点”px。
weight字体粗细。
范围是 0~99。
bold属性是布尔值对应weight约为 75粗和非粗体约 50。
underline是否有下划线。
italic是否倾斜。
strikeOut是否有删除线。
toolTip提示文本鼠标悬停在控件上时显示的简短解释文字。
ui-yes-setToolTip(这是yes按钮); ui-yes-setToolTipDuration(
; // 设置显示时间单位毫秒 ui-no-setToolTip(这是no按钮); ui-no-setToolTipDuration(
;
focusPolicy焦点策略设置控件如何获得焦点如文本框可以被什么方式激活。
常见选项StrongFocus可以通过鼠标点击和键盘Tab键获得焦点。
ClickFocus只能通过鼠标点击获得焦点。
TabFocus只能通过键盘Tab键获得焦点。
NoFocus不能获得焦点。
styleSheet样式表仿CSS的QSS使用类似 CSS 的键值对语法来修改控件的外观颜色、边框、背景等。
// 设置背景色为白色 this-setStyleSheet(background-color:white;); // 设置文本编辑框背景为白色文字为黑色 ui-textEdit-setStyleSheet(background-color:white;color:black);示例实现简单的白天/黑夜模式切换void Widget::on_pushButton_clicked() { // 白天模式 this-setStyleSheet(background-color:rgb(240,240,