整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Glass2k - 让 Windows 窗口变透明的

Glass2k - 让 Windows 窗口变透明的小工具

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的基础知识

Stage是JavaFX中表示窗口的主要类。它作为一个容器,包含了一个或多个Scene,每个Scene又包含了各种UI组件。Stage的创建是JavaFX应用程序的第一步,它为用户提供了与应用程序交互的窗口。

创建和设置Stage

创建一个基本的Stage对象非常简单:

Stage primaryStage=new Stage();

然后,我们可以设置Stage的一些基本属性,例如标题、尺寸和图标:

//设置标题
primaryStage.setTitle("My JavaFX App");
//设置宽度
primaryStage.setWidth(800);
//设置高度
primaryStage.setHeight(600);
//设置图标
primaryStage.getIcons().add(new Image("icon.png"));

Stage的布局和设计

JavaFX提供了多种布局管理器,以便更好地组织Stage中的UI组件。例如,使用VBox或HBox(后面会陆续解释这些布局)可以轻松实现垂直或水平排列的布局。同时,我们可以通过CSS样式表或编程方式自定义Stage的外观,以满足应用程序的设计需求。

Stage的生命周期

Stage的生命周期包括初始化、启动和停止阶段。在初始化阶段,Stage的构造函数和init方法被调用。在启动阶段,start方法是主要入口点,负责创建Stage的用户界面。停止阶段,stop方法被调用,用于清理资源和执行必要的关闭操作,之前的文章中有介绍生命周期。

Stage的高级功能

initStyle 方法:

void initStyle(StageStyle style)
  • 设置 Stage 的窗口风格。
  • 参数 style:StageStyle 枚举值,包括 StageStyle.DECORATED、StageStyle.UNDECORATED、StageStyle.TRANSPARENT 等。
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)
  • 设置窗口是否可以调整大小。
  • 参数 resizable:true 表示可调整大小,false 表示不可调整大小。

setTitle 方法:

void setTitle(String title)
  • 设置窗口的标题。
  • 参数 title:窗口标题的字符串。

setWidth 和 setHeight 方法:

void setWidth(double width)
void setHeight(double height)
  • 设置窗口的宽度和高度。
  • 参数 width 和 height:分别表示宽度和高度的双精度值。

close 方法:

void close()
  • 关闭窗口。

isShowing 方法:

  • 检查窗口是否正在显示。
  • 返回值:true 表示窗口正在显示,false 表示窗口未显示或已关闭。

setIconified 方法:

void setIconified(boolean value)
  • 最小化或还原窗口。
  • 参数 value:true 表示最小化,false 表示还原窗口。

toFront 方法:

void toFront()
  • 将窗口置于最前。

toBack 方法:

void toBack()
  • 将窗口置于最后。

setFullScreen 方法:

void setFullScreen(boolean value)
  • 设置窗口是否全屏。
  • 参数 value:true 表示全屏,false 表示取消全屏。

setFullScreenExitKeyCombination 方法:

void setFullScreenExitKeyCombination(KeyCombination keyCombination)
  • 设置用于退出全屏模式的键盘组合。
  • 参数 keyCombination:KeyCombination 对象。

setOnCloseRequest 方法:

void setOnCloseRequest(EventHandler<WindowEvent> eventHandler)
  • 设置窗口关闭请求事件的处理程序。
  • 参数 eventHandler: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 类的一些方法,包括设置标题、大小、场景、关闭事件处理程序、最小化、全屏、打开新窗口以及模态窗口等。请根据实际需求进行修改和扩展。