文章目录
- enabled(控件可用状态)
- geometry(位置和尺寸)
- 简单恶搞程序
- windowIcon(顶层 widget 窗口图标)
- 使用 qrc 机制
- windowOpacity(窗口的不透明值)
- cursor(当鼠标悬停空间上的形状)
- 自定义鼠标图标
- toolTip(鼠标悬停时的提示)
- focusPolicy(控件获取焦点的策略)
- styleSheet(通过CSS修改控件样式)
enabled(控件可用状态)
isEnabled():获取控件的可用状态
setEnabled(bool):设置控件是否可用
QPushButton *b1 = new QPushButton(this);
QPushButton *b2 = new QPushButton(this);
b1->setText("点击");
b2->setText("点击"); b2->move(0, 100);
qDebug() << "b1: " << b1->isEnabled();
b2->setEnabled(false);
qDebug() << "b2: " << b2->isEnabled();
geometry(位置和尺寸)
move 只是移动控件的位置,也就是只修改控件的位置
geometry 可以设置四个属性,位置:x,y;尺寸:width,height
geometry():获取控件的位置和尺寸,return:QRect
setGeometry(QRect)/setGeometry(int x, int y, int width, int height):设置控件位置和尺寸
QPushButton *b1 = new QPushButton(this);
QPushButton *b2 = new QPushButton(this); b2->move(20, 20);
qDebug() << b1->geometry();
qDebug() << b2->geometry();
QRect q(100, 100, 50, 50);
b1->setGeometry(q);
qDebug() << b1->geometry();
b2->setGeometry(200, 200, 100, 100);
qDebug() << b2->geometry();
简单恶搞程序
QLabel *l = new QLabel(this);
l->setText("和我在一起好不好");
l->setGeometry(350, 200, 100, 100);
QPushButton *b1 = new QPushButton(this); b1->setText("答应");
QPushButton *b2 = new QPushButton(this); b2->setText("拒绝");
b1->setGeometry(650, 500, 90, 30);
b2->setGeometry(50, 500, 90, 30);
connect(b1, &QPushButton::clicked, this, [=](){
Widget::close();
});
connect(b2, &QPushButton::clicked, this, [=](){
int x, y;
x = rand() % this->geometry().width();
y = rand() % this->geometry().height();
b2->move(x, y);
});
这个程序需要点到答应按钮就会退出窗口, 而点击拒绝按钮该按钮就会随机出现到别的地方
windowIcon(顶层 widget 窗口图标)
windowIcon():获取到控件的窗口图标,返回 QIcon 对象。
setWindowIcon(const QIcon& icon):设置控件的窗口图标。
QIcon icon("d:/1.jpeg"); // 注意不可以用 \
this->setWindowIcon(icon);
使用 qrc 机制
上述的方法相对来说比较麻烦,因为需要用到绝对路径显然不合理。
- 首先创建 qrc 文件
- 设置前缀
- 添加需要的图片
因为 qrc 文件中添加图片需要在当前项目的目录中,因此选择图片之后出现这个说明:需要的图片并不在当前项目的目录或者子目录下,点击复制之后选中当前项目目录保存即可。
- 引用
添加完之后就可以使用了
QIcon icon(":/1.jpeg"); // 注意需要在前缀前面加上冒号
this->setWindowIcon(icon);
windowOpacity(窗口的不透明值)
windowOpacity():获取到控件的不透明数值返回 float, 取值为 0.0-1.0,其中 0.0 表示全透明, 1.0 表示完全不透明。
setWindowOpacity(float n):设置控件的不透明数值
QPushButton *b1 = new QPushButton(this); b1->setText("+");
QPushButton *b2 = new QPushButton(this); b2->setText("-");
b2->move(0, 200);
connect(b1, &QPushButton::clicked, this, [=](){
// 获取当前不透明值
float opacity = this->windowOpacity();
if(opacity >= 1.0) return;
qDebug() << opacity;
opacity += 0.1; // 增加值
// 设置值
this->setWindowOpacity(opacity);
});
connect(b2, &QPushButton::clicked, this, [=](){
// 获取当前不透明值
float opacity = this->windowOpacity();
if(opacity <= 0.0) return;
qDebug() << opacity;
opacity -= 0.1; // 减少值
// 设置值
this->setWindowOpacity(opacity);
});
cursor(当鼠标悬停空间上的形状)
cursor():获取到当前 widget 的 cursor 属性, 返回 QCursor 对象。
setCursor(const QCursor& cursor):设置该 widget 光标的形状. 仅在鼠标停留在该 widget 上时有效
QGuiApplication::setOverrideCursor(const QCursor& cursor):设置全局的形状,对整个程序中的所有 widget 都会生效覆盖
QPushButton *b1 = new QPushButton(this); b1->setText("+");
QPushButton *b2 = new QPushButton(this); b2->setText("-");
b2->move(0, 200);
b1->setCursor(QCursor(Qt::WaitCursor));
b2->setCursor(QCursor(Qt::IBeamCursor));
QGuiApplication::setOverrideCursor(QCursor(Qt::IBeamCursor));
由于截图显示不出来就不截图了
Ctrl + 左键 点击 Qt::WaitCursor 跳转到源码即可看到所有的形状列表。
自定义鼠标图标
// 创建⼀个位图对象, 加载⾃定义光标图片
QPixmap pixmap(":/1.jpeg");
// 缩放图片的尺⼨.
pixmap = pixmap.scaled(64, 64);
// 创建 QCursor 对象, 并指定 "热点" 为 (2, 2) 坐标位置.
// "热点" 就是⿏标点击时⽣效的位置.
QCursor cursor(pixmap, 2, 2);
// 设置光标
this->setCursor(cursor);
toolTip(鼠标悬停时的提示)
setToolTip;设置 toolTip。
setToolTipDuring:设置 toolTip 提示的时间. 单位 ms. 时间到后 toolTip 自动消失
QPushButton *b1 = new QPushButton(this); b1->setText("+");
QPushButton *b2 = new QPushButton(this); b2->setText("-");
b2->move(0, 200);
b1->setToolTip("减少透明度"); b1->setToolTipDuration(1000);
b2->setToolTip("增加透明度"); b2->setToolTipDuration(1000);
focusPolicy(控件获取焦点的策略)
焦点:选中这个元素后接下来的操作都是针对这个元素。例如输入框选中后可以往输入框中写字。
focusPolicy():获取该 widget 的 focusPolicy, 返回 Qt::FocusPolicy。
setFocusPolicy(Qt::FocusPolicy policy):设置 widget 的 focusPolicy
Qt::FocusPolicy 是⼀个枚举类型:
值 | 作用 |
---|---|
Qt::NoFocus | 控件不会接受键盘焦点 |
Qt::TabFocus | 控件只可以通过Tab键接受焦点 |
Qt::ClickFocus | 控件只可以鼠标点击接受焦点 |
Qt::StrongFocus(默认值) | 控件可以通过Tab键或者鼠标点击接受焦点 |
Qt::WheelFocus | StrongFocus和可以通过鼠标滚轮 |
styleSheet(通过CSS修改控件样式)
this->setStyleSheet("background-color: #333");