CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này Triển khai tùy chỉnh cửa sổ bật lên nhanh QT được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Mục lục
- 1.Giới thiệu Popup
- 2. Tùy chỉnh cửa sổ bật lên
。
1.Giới thiệu Popup
Popup là một điều khiển cửa sổ bật lên. Các thuộc tính chung của nó như sau:
- Anchors.centerIn: Đối tượng, được sử dụng để đặt cửa sổ làm trung tâm.
- closePolicy: liệt kê, đặt chính sách đóng của cửa sổ bật lên. Giá trị mặc định là Popup.CloseOnEscape|Popup.CloseOnPressOutside.
- Popup.NoAutoClose: Cửa sổ bật lên sẽ chỉ bị đóng sau khi gọi thủ công close() (ví dụ: không phải khi tải tiến trình).
- Popup.CloseOnPressOutside : Khi nhấn chuột ra ngoài cửa sổ bật lên, cửa sổ bật lên sẽ bị đóng.
- Popup.CloseOnPressOutsideParent : Cửa sổ bật lên sẽ đóng khi nhấn chuột bên ngoài cha mẹ của nó.
- Popup.CloseOnReleaseOutside : Cửa sổ bật lên sẽ đóng khi thả chuột ra ngoài cửa sổ bật lên.
- Popup.CloseOnReleaseOutsideParent : Cửa sổ bật lên sẽ đóng khi chuột được thả ra trên cha mẹ của nó.
- Popup.CloseOnEscape: Khi cửa sổ bật lên có tiêu điểm hoạt động, cửa sổ bật lên sẽ đóng khi nhấn phím ESC.
- dim: bool, thuộc tính dim, mặc định là không xác định, nếu đặt thành false thì các nền khác sau khi cửa sổ modal bật lên sẽ không bị mờ.
- modal: bool, modal, mặc định là sai (cuộc gọi không theo chế độ, không chặn, cho biết khi hộp thoại xuất hiện, bạn cũng có thể tương tác với cửa sổ chính và mờ không có tác dụng tại thời điểm này)
- enter: Chuyển tiếp, chuyển tiếp ảnh động khi vào cửa sổ bật lên
- exit: Chuyển tiếp, chuyển tiếp ảnh động khi thoát khỏi cửa sổ pop-up
Tín hiệu của nó như sau
- void aboutToHide(): Tín hiệu này được phát ra khi cửa sổ bật lên sắp bị ẩn.
- void aboutToShow(): Tín hiệu này được phát ra khi cửa sổ bật lên sắp được hiển thị.
- void close(): Tín hiệu này được phát ra khi cửa sổ bật lên bị đóng.
- void open(): Tín hiệu này được phát ra khi một cửa sổ bật lên được mở.
Phương pháp của nó như sau
- void close(): Đóng cửa sổ bật lên.
- ForceActiveFocus(reason = Qt.OtherFocusReason): buộc tập trung
- void open(): Mở cửa sổ hiện ra.
Sau đó, chúng tôi sẽ tùy chỉnh và triển khai cửa sổ bật lên có chỉ báo.
。
2. Tùy chỉnh cửa sổ bật lên
Vì bố cục neo của Popup chỉ có một neo.centerIn, nếu bạn muốn Popup nằm ở phía trên bên trái của điều khiển, bạn phải tùy chỉnh một điều khiển. Ảnh chụp màn hình triển khai như sau (đã được tải lên nhóm)

Hiệu quả thực hiện như sau

Đầu tiên, chúng ta cần triển khai hai thuộc tính HorizontalPosBase và VerticalPosBase để nhận biết vị trí của Popup trong đối tượng mục tiêu.
- Một là đặt vị trí nằm ngang của cửa sổ bật lên trong đối tượng mục tiêu.
- Một là vị trí thẳng đứng của cửa sổ bật lên trong đối tượng mục tiêu.
Vì chúng ta đã biết hướng nên tọa độ của chỉ báo có thể được tính toán tự động. Mã triển khai cụ thể như sau.
// Không áp dụng được cho cả hai kiểu dữ liệu, kiểu dữ liệu là horizontalPosBase và verticalPosBase. Phương thức định nghĩa enum IndicatorStyle { IndicatorLeft, IndicatorRight, IndicatorTop, IndicatorBottom } function updateIndicatorPos(indicatorStyle) { switch (indicatorStyle) { case IndicatorPopup.IndicatorLeft: indicator.x = - indicator.width*0.4; indicator.y = back.height <= myTarget.height ? (back.height)/2-indicatorLen : verticalPosBase === IndicatorPopup.TopAlign ? (myTarget.height)/2 -indicatorLen : verticalPosBase === IndicatorPopup.VerticalAlign ? (back.height)/2 -indicatorLen : back.height - (myTarget.height)/2 -indicatorLen; break; trường hợp IndicatorPopup.IndicatorRight: indicator.x = width - indicator.width*1.2; indicator.y = back.height <= myTarget.height ? (back.height)/2-indicatorLen : verticalPosBase === IndicatorPopup.TopAlign ? (myTarget.height)/2 -indicatorLen : verticalPosBase === IndicatorPopup.VerticalAlign ? (back.height)/2 -indicatorLen : back.height - (myTarget.height)/2 -indicatorLen; ngắt; trường hợp IndicatorPopup.IndicatorTop: indicator.x = back.width <= myTarget.width ? (back.width)/2-indicatorLen : horizontalPosBase === IndicatorPopup.PosBaseToRight ? (myTarget.width)/2 -indicatorLen : horizontalPosBase === IndicatorPopup.PosBaseToHorizontal ? (back. width)/2 -indicatorLen : back. width - (myTarget. width)/2 -indicatorLen; indicator. y = - indicator. width*0.4; break; case IndicatorPopup.IndicatorBottom: indicator.x = back. width <= myTarget. width ? (back. width)/2-indicatorLen : horizontalPosBase === IndicatorPopup.PosBaseToRight ? (myTarget. width)/2 -indicatorLen : horizontalPosBase === IndicatorPopup.PosBaseToHorizontal ? (back. width)/2 -indicatorLen : back. width - (myTarget. width)/2 -indicatorLen; indicator. y = height - indicator. height*1.2; break; } console.log("indicator",indicator.x,indicator.y,indicator.width,indicator.height) } function updatePopupPos() { var indicatorStyle; switch (horizontalPosBase) { case IndicatorPopup.PosBaseToLeft: // Thay đổi kích thước pop-up x = myTarget.x - width - targetSpacing; y = verticalPosBase === IndicatorPopup.TopAlign ? myTarget.y : verticalPosBase === IndicatorPopup.VerticalAlign ? myTarget.y + myTarget.height/2 - height/2 : myTarget.y - height + myTarget.height indicatorStyle = IndicatorPopup.IndicatorRight; break; case IndicatorPopup.PosBaseToHorizontal: // popup hiển thị x = myTarget.x + myTarget.width/2 - width/2; y = verticalPosBase === IndicatorPopup.PosBaseToTop ? myTarget.y - height - targetSpacing : verticalPosBase === IndicatorPopup.PosBaseToBottom ? myTarget.y + myTarget.height + targetSpacing : myTarget.y + myTarget.height + targetSpacing indicatorStyle = verticalPosBase === IndicatorPopup.PosBaseToTop ? IndicatorPopup.IndicatorBottom : IndicatorPopup.IndicatorTop; break; case IndicatorPopup.PosBaseToRight: // popup hiển thị x = myTarget.x + myTarget.width + targetSpacing; y = verticalPosBase === IndicatorPopup.TopAlign ? myTarget.y : verticalPosBase === IndicatorPopup.VerticalAlign ? myTarget.y + myTarget.height/2 - height/2 : myTarget.y - chiều cao + myTarget.height indicatorStyle = IndicatorPopup.IndicatorLeft console.log("PosBaseToRight",x,y,indicatorStyle); ngắt; } back.anchors.leftMargin = indicatorStyle === IndicatorPopup.IndicatorLeft ? indicatorLen : 0 back.anchors.rightMargin = indicatorStyle === IndicatorPopup.IndicatorRight ? indicatorLen : 0 back.anchors.bottomMargin = indicatorStyle === IndicatorPopup.IndicatorBottom ? indicatorLen : 0 back.anchors.topMargin = indicatorStyle === IndicatorPopup.IndicatorTop ? indicatorLen : 0 leftPadding = indicatorStyle === IndicatorPopup.IndicatorLeft ? indicatorLen : 0 rightPadding = indicatorStyle === IndicatorPopup.IndicatorRight ? indicatorLen : 0 bottomPadding = indicatorStyle === IndicatorPopup.IndicatorBottom ? indicatorLen : 0 topPadding = indicatorStyle === IndicatorPopup.IndicatorTop ? indicatorLen : 0 console.log(x,y,indicatorStyle); updateIndicatorPos(indicatorStyle); }
Ví dụ: nếu chúng ta muốn cửa sổ bật lên nằm ở phía bên trái của mục tiêu và căn chỉnh ở trên cùng, chúng ta có thể viết nó như thế này (không cần chỉ định tọa độ X và Y của cửa sổ bật lên)
Nút { id: btn text: "Căn chỉnh ngang trên cùng bên trái" onClicked: { Popup.backgroundColor = "#12B7F5" Popup.horizontalPosBase = IndicatorPopup.PosBaseToLeft Popup.verticalPosBase = IndicatorPopup.TopAlign Popup.indicatorOpen(btn) } } IndicatorPopup { id : chiều rộng cửa sổ bật lên : 180 chiều cao: 200 modal: false focus: true parent: Overlay.overlay // Overlay.overlay nghĩa là cửa sổ chính và được gắn vào bất kỳ mục hoặc cửa sổ bật lên nào để tránh tình trạng giao diện hiện tại không phải là giao diện chính và cửa sổ bật lên- cửa sổ lên TextArea không thể hiển thị. { neo.fill: văn bản gốc: "1234567890" color: "#FFF" font.pixelSize: 14 font.family: "Microsoft Yahei" quấnMode: TextEdit.WrapAnywhere } closePolicy: Popup.CloseOnEscape Popup.CloseOnPressOutside}
Nếu chúng ta sử dụng cửa sổ bật lên theo chế độ và muốn đặt màu nền bên ngoài cửa sổ bật lên, chúng ta có thể đặt thuộc tính bổ sung Overlay.modal, chẳng hạn như đặt nó thành màu đỏ
Overlay.modal: Hình chữ nhật { màu: "#aaffdbe7"}
Hiệu quả như sau

Điều này kết thúc bài viết này về việc triển khai tùy chỉnh cửa sổ bật lên QT quick-Popup. Để biết thêm nội dung liên quan đến cửa sổ bật lên QT quick-Popup, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt qua các bài viết liên quan sau đây. nhiều hơn nữa trong tương lai. .
Liên kết gốc: https://www.cnblogs.com/lifexy/p/14958447.html.
Cuối cùng, bài viết này về việc triển khai tùy chỉnh cửa sổ bật lên QT quick-Popup kết thúc tại đây. Nếu bạn muốn biết thêm về việc triển khai tùy chỉnh cửa sổ bật lên QT quick-Popup, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. , Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!