lass2K 是一款可以让 Windows 窗口 变 透明 的小工具( 仅 26.1KB 大小 ),单文件程序免安装。打开后即可看到 下方图示 的程序界面,底部 Ok / Hide Me 按钮可以隐藏工具界面,可在 任务栏 托盘内再次打开;Unload Glass2k 按钮为 退出 按钮,如果不需要使用时点击即可关闭工具。
该工具的上手使用也非常简单,工具内的 Help / Documentation 提示内已说明 使用方法。运行 Glass2k 后点击 OK / Hide Me 隐藏工具,打开任意需要进行透明化调整的窗口内同时按快捷键 Ctrl + Alt + 1~9 范围内的任意数字,数值越小越透明,数值越大越清晰。Ctrl + Alt + 0 则是恢复默认。
最后小编以 Everything 为例,逐级调整 透明效果。有需要 上班摸鱼 或 同时阅览 多份文件时可以使用该工具。不过较为遗憾的是该工具不能对透明化窗体进行 置顶,因此无置顶功能的软件则需要借助于第三方工具实现。
为解决 窗口置顶 的问题,小编再分享一款 窗口置顶 工具给大家,打开后选择需要置顶的 窗体 按默认的 F7 热键置顶即可完成操作,非常的简单实用,有需要的可以到 网盘 内下载两款工具的合集压缩包进行体验。
资源获取:私信回复关键词「 0724 」获取下载地址,或关注公众号 【 拾集 Plus 】( shijiplus )回复相同关键词获取。头条消息回复不及时多请谅解,如有任何问题留言后耐心等待回复,感谢谅解。
规则窗体的实现有两种方式:
一种是设置窗体的掩码图像;
另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。
第一种方式:
首先要准备两张图像,一张是要显示的图像,另一张是第一张图的掩码图像,黑色部分是你的窗体要显示的部分,如图:
具体实现的关键代码如下:
//IrregularForm1.h IrregularForm1::IrregularForm1(QWidget *parent) : QWidget(parent) { setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框 //设置背景 QPixmap pixmap(":/pic.png"); QPalette palette; palette.setBrush(backgroundRole(), QBrush(pixmap)); setPalette(palette); //设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体 QBitmap bitmap(":/picmask.png"); setMask(bitmap); } |
运行效果不是特别完美,应该是我的掩码图像的问题,如图:
这种方式有一个问题,就是当你的图像特别不规则的时候,会有很明显的锯齿出现。之前做过一个卡通图像就出现这个问题,解决的办法是使用下面的第二种方法。
第二种方式:
只需要准备一张图片,透明部分将不会显示,支持半透明。我这里弄了一张背景透明,前景半透明的图像,如图:
具体实现的关键代码如下:
//IrregularForm2.cpp IrregularForm2::IrregularForm2(QWidget *parent) : QWidget(parent) { this->setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框 this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明 pic.load(":/IrregularPic.png");//加载图像 this->resize(pic.size()); } //重写绘图事件 void IrregularForm2::paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawPixmap(0, 0, pic);//绘制图像 } |
效果截图:
说到这里,我们的不规则透明窗体虽然创建出来了,但是现在我们无法移动它了,现在我们就来实现左键拖动窗体的功能,首先要先声明两个变量,另外要重写三个事件,代码如下:
//IrregularForm1.h class IrregularForm1 : public QWidget { Q_OBJECT public: explicit IrregularForm1(QWidget *parent=0); protected: QPoint oldPos; bool press; void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); }; |
关键的实现代码(press变量在构造函数中初始化为false):
//IrregularForm1.cpp void IrregularForm1::mousePressEvent(QMouseEvent *event) { if(event->button()==Qt::LeftButton) { oldPos=event->globalPos(); press=true; } } void IrregularForm1::mouseMoveEvent(QMouseEvent *event) { if (press) { this->move(this->pos() + event->globalPos() - oldPos); oldPos=event->globalPos(); } } void IrregularForm1::mouseReleaseEvent(QMouseEvent *event) { press=false; } |
这样就实现不规则窗体的移动功能了。
【领QT开发教程学习资料,进Qt开发交流君羊:546183882 莬废领取,先码住不迷路~】
JavaFX应用程序的核心组件之一是Stage,它是GUI应用程序的顶层窗口容器。在本文中,我们将深入探讨JavaFX Stage的基础知识、创建和设置、布局和设计、生命周期、高级功能以及与Scene的交互。了解Stage的这些方面对于构建丰富、交互性强的JavaFX应用程序至关重要。
Stage是JavaFX中表示窗口的主要类。它作为一个容器,包含了一个或多个Scene,每个Scene又包含了各种UI组件。Stage的创建是JavaFX应用程序的第一步,它为用户提供了与应用程序交互的窗口。
创建一个基本的Stage对象非常简单:
Stage primaryStage=new Stage();
然后,我们可以设置Stage的一些基本属性,例如标题、尺寸和图标:
//设置标题
primaryStage.setTitle("My JavaFX App");
//设置宽度
primaryStage.setWidth(800);
//设置高度
primaryStage.setHeight(600);
//设置图标
primaryStage.getIcons().add(new Image("icon.png"));
JavaFX提供了多种布局管理器,以便更好地组织Stage中的UI组件。例如,使用VBox或HBox(后面会陆续解释这些布局)可以轻松实现垂直或水平排列的布局。同时,我们可以通过CSS样式表或编程方式自定义Stage的外观,以满足应用程序的设计需求。
Stage的生命周期包括初始化、启动和停止阶段。在初始化阶段,Stage的构造函数和init方法被调用。在启动阶段,start方法是主要入口点,负责创建Stage的用户界面。停止阶段,stop方法被调用,用于清理资源和执行必要的关闭操作,之前的文章中有介绍生命周期。
initStyle 方法:
void initStyle(StageStyle style)
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class App extends Application {
public static void main(String[] args) {
launch(args); // 程序入口
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("My JavaFX App");
primaryStage.setWidth(800);
primaryStage.setHeight(600);
//第一个和第5个最常用
primaryStage.initStyle(StageStyle.DECORATED);//默认窗口
// primaryStage.initStyle(StageStyle.TRANSPARENT);//透明窗口
// primaryStage.initStyle(StageStyle.UNDECORATED);//透明窗口
// primaryStage.initStyle(StageStyle.UNIFIED);//无顶部装饰条
// primaryStage.initStyle(StageStyle.UTILITY);//无最小化最大化按钮
primaryStage.show();
}
}
StageStyle.DECORATED默认窗口
StageStyle.UTILITY无最小化最大化按钮
setResizable 方法:
void setResizable(boolean resizable)
setTitle 方法:
void setTitle(String title)
setWidth 和 setHeight 方法:
void setWidth(double width)
void setHeight(double height)
close 方法:
void close()
isShowing 方法:
setIconified 方法:
void setIconified(boolean value)
toFront 方法:
void toFront()
toBack 方法:
void toBack()
setFullScreen 方法:
void setFullScreen(boolean value)
setFullScreenExitKeyCombination 方法:
void setFullScreenExitKeyCombination(KeyCombination keyCombination)
setOnCloseRequest 方法:
void setOnCloseRequest(EventHandler<WindowEvent> eventHandler)
以下是一个简单的JavaFX代码示例,演示了 Stage 类的一些方法及其注释说明。请注意,这只是一个基本的示例,实际使用时可能需要根据应用程序需求进行更详细和复杂的实现。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;
public class StageDemo extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// 设置窗口标题
primaryStage.setTitle("Stage Demo");
// 设置窗口大小
primaryStage.setWidth(400);
primaryStage.setHeight(300);
// 创建场景
Scene scene=new Scene(new VBox(), 400, 300);
// 设置场景到窗口
primaryStage.setScene(scene);
// 添加按钮用于显示另一个窗口
Button openNewStageButton=new Button("Open New Stage");
openNewStageButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
openNewStage();
}
});
// 添加按钮用于最小化窗口
Button minimizeButton=new Button("Minimize");
minimizeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.setIconified(true);
}
});
// 添加按钮用于设置全屏
Button fullscreenButton=new Button("Toggle Fullscreen");
fullscreenButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.setFullScreen(!primaryStage.isFullScreen());
}
});
// 添加按钮用于设置模态窗口
Button modalButton=new Button("Open Modal");
modalButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
openModalStage();
}
});
// 添加文本框用于设置窗口标题
TextField titleTextField=new TextField("New Title");
Button setTitleButton=new Button("Set Title");
setTitleButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.setTitle(titleTextField.getText());
}
});
// 设置窗口关闭事件处理程序
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println("Stage is closing");
}
});
// 将组件添加到布局
VBox rootLayout=(VBox) scene.getRoot();
rootLayout.getChildren().addAll(
openNewStageButton,
minimizeButton,
fullscreenButton,
modalButton,
titleTextField,
setTitleButton
);
// 显示主窗口
primaryStage.show();
}
// 打开新的窗口
private void openNewStage() {
Stage newStage=new Stage();
newStage.setTitle("New Stage");
newStage.setWidth(300);
newStage.setHeight(200);
Scene newScene=new Scene(new VBox(), 300, 200);
newStage.setScene(newScene);
// 设置新窗口为模态窗口
newStage.initModality(Modality.APPLICATION_MODAL);
// 添加关闭按钮
Button closeButton=new Button("Close");
closeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
newStage.close();
}
});
// 将按钮添加到布局
VBox rootLayout=(VBox) newScene.getRoot();
rootLayout.getChildren().add(closeButton);
// 显示新窗口
newStage.show();
}
// 打开模态窗口
private void openModalStage() {
Stage modalStage=new Stage();
modalStage.setTitle("Modal Stage");
modalStage.initStyle(StageStyle.UTILITY);
modalStage.setWidth(250);
modalStage.setHeight(150);
Scene modalScene=new Scene(new VBox(), 250, 150);
modalStage.setScene(modalScene);
// 设置新窗口为模态窗口
modalStage.initModality(Modality.APPLICATION_MODAL);
// 添加关闭按钮
Button closeButton=new Button("Close");
closeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
modalStage.close();
}
});
// 将按钮添加到布局
VBox rootLayout=(VBox) modalScene.getRoot();
rootLayout.getChildren().add(closeButton);
// 显示新窗口
modalStage.showAndWait();
}
}
样例代码
这个示例演示了如何使用 Stage 类的一些方法,包括设置标题、大小、场景、关闭事件处理程序、最小化、全屏、打开新窗口以及模态窗口等。请根据实际需求进行修改和扩展。
*请认真填写需求信息,我们会在24小时内与您取得联系。