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小時內與您取得聯系。