Hệ thống thành phần và điều khiển mở rộng trong SOUI4
【Liên kết tải miễn phí】soui4 Soui là một framework phát triển ứng dụng PC được duy trì và phát triển liên tục trong 14 năm, hiện đã hỗ trợ ba nền tảng PC là Windows, Linux và macOS, có thể sẽ hỗ trợ thêm các nền tảng di động trong tương lai, hãy cùng chờ đón! Địa chỉ dự án: https://gitcode.com/setoutsoft/soui4
SOUI4 cung cấp thư viện điều khiển nội phong phong phú và khả năng phát triển điều khiển mở rộng, bao quát các tình huống tương tác cơ bản, bố cục container, hiển thị dữ liệu và hơn thế nữa. Bài viết này sẽ trình bày toàn diện về hệ thống thành phần SOUI4 từ bốn phương diện: chức năng và sử dụng của điều khiển nội phong, phát triển và tích hợp điều khiển mở rộng, tích hợp thư viện bên thứ ba (như Skia, Lua) và các trường hợp thực hiện điều khiển tùy chỉnh.
Thư viện điều khiển nội phong và cách sử dụng
SOUI4 cung cấp thư viện điều khiển nội phong phong phú, các điều khiển này đáp ứng nhu cầu tương tác UI phổ biến, từ các nút bấm, ô văn bản cơ bản đến các bảng, điều khiển cây phức tạp. Phần này sẽ giới thiệu chi tiết chức năng, cách sử dụng và các phương pháp tốt nhất trong các tình huống phổ biến của các điều khiển nội phong này.
Phân loại và chức năng tổng quan điều khiển
Thư viện điều khiển nội phong của SOUI4 có thể được phân loại thành các loại sau:
- Điều khiển cơ bản: Như
SButton,SText,SEdit..., dùng cho tương tác người dùng cơ bản. - Điều khiển container: Như
SPanel,SScrollView..., dùng để bố cục và tổ chức các điều khiển khác. - Điều khiển danh sách và bảng: Như
SListBox,SListCtrl,STreeBox..., dùng để hiển thị và quản lý danh sách dữ liệu. - Điều khiển chức năng đặc biệt: Như
SProgress,SDateTimeEdit,SIPAddressCtrl..., cung cấp hỗ trợ chức năng cụ thể.
Bảng phân loại sau đây cung cấp cái nhìn tổng quan:
| Loại điều khiển | Ví dụ điều khiển | Chức năng chính |
|---|---|---|
| Điều khiển cơ bản | SButton, SText |
Nút bấm, hiển thị văn bản |
| Điều khiển container | SPanel, SScrollView |
Quản lý bố cục, hỗ trợ cuộn |
| Điều khiển danh sách và bảng | SListBox, STreeBox |
Hiển thị dữ liệu, thao tác chọn |
| Điều khiển chức năng đặc biệt | SProgress, SIPAddressCtrl |
Hiển thị tiến độ, nhập địa chỉ IP |
Giải thích chi tiết các điều khiển phổ biến
1. Điều khiển nút SButton
SButton là điều khiển tương tác cơ bản nhất trong SOUI4, hỗ trợ các sự kiện nhấp chuột và chuyển đổi trạng thái. Dưới đây là ví dụ sử dụng đơn giản:
<nút tên="btn_test" vị trí="10,10,100,30" văn_bản="Nhấp vào tôi" da="btn_skin" />
Giải thích chức năng:
tên: Định danh duy nhất của điều khiển.vị_trí: Vị trí và kích thước của điều khiển.văn_bản: Văn bản hiển thị trên nút.da: Phong cách giao diện của nút.
2. Điều khiển văn bản SText
SText dùng để hiển thị văn bản tĩnh, hỗ trợ văn bản phong phú và định dạng đơn giản. Ví dụ:
<văn_bản tên="txt_demo" vị_trí="10,50,200,30" văn_bản="Xin chào, SOUI4!" màu="#FF0000" />
Giải thích chức năng:
màu: Màu văn bản.- Hỗ trợ thuộc tính
fontđể chỉ định font chữ.
3. Điều khiển danh sách SListBox
SListBox dùng để hiển thị danh sách dữ liệu, hỗ chế độ chọn đơn và chọn nhiều. Ví dụ:
<danh_sách tên="list_demo" vị_trí="10,100,200,150">
<mục văn_bản="Mục 1" />
<mục văn_bản="Mục 2" />
<mục văn_bản="Mục 3" />
</danh_sách>
Giải thích chức năng:
- Hỗ trợ thêm và xóa mục động.
- Có thể đặt mục được chọn mặc định qua thuộc tính
đã_chọn.
4. Điều khiển thanh tiến độ SProgress
SProgress dùng để hiển thị tiến độ công việc, hỗ trợ hai phương hướng ngang và dọc. Ví dụ:
<tiến_độ tên="progress_demo" vị_trí="10,260,200,20" phạm_vi="100" giá_trị="50" />
Giải thích chức năng:
phạm_vi: Giá trị tối đa của thanh tiến độ.giá_trị: Giá trị tiến độ hiện tại.
Xử lý sự kiện điều khiển
Các điều khiển trong SOUI4 hỗ trợ nhiều loại sự kiện như nhấp chuột, thay đổi tiêu điểm, nhập bàn phím. Dưới đây là ví dụ mã xử lý sự kiện nhấp chuột nút:
lớp CTestDlg : công_kế_thừa SHostDialog {
công:
void XuLyNhanNut(SuKien *pSuKien) {
if (pSuKien->nguoi_gui->LayTen() == L"btn_test") {
SText *pText = TimConTheoTen<SText>(L"txt_demo");
pText->ThietLapVanBan(L"Nút đã được nhấn!");
}
}
};
Giải thích:
- Xử lý sự kiện nhấp chuột nút bằng cách ghi đè phương thức
XuLyNhanNut. - Sử dụng
TimConTheoTenđể tìm điều khiển con.
Tùy chỉnh giao diện điều khiển
SOUI4 hỗ trợ tùy chỉnh giao diện điều khiển qua da (Skin). Da có thể là ảnh hoặc kiểu định dạng XML. Ví dụ định nghĩa da đơn giản:
<da tên="btn_skin" >
<trạng_thái tên="bình_thường" nguồn="btn_normal.png" />
<trạng_thái tên="di_chuyển_chuột" nguồn="btn_hover.png" />
<trạng_thái tên="nhấn" nguồn="btn_pushed.png" />
</da>
Giải thích:
trạng_tháiđịnh nghĩa kiểu hiển thị ở các trạng thái khác nhau.nguồnchỉ định đường dẫn ảnh tài nguyên.
Ví dụ điều khiển nâng cao: SIPAddressCtrl
SIPAddressCtrl là điều khiển nâng cao để nhập địa chỉ IP, hỗ trợ xác thực định dạng và nhập theo đoạn. Ví dụ sử dụng:
<địa_chỉ_ip tên="ip_ctrl" vị_trí="10,300,200,30" />
Giải thích chức năng:
- Tự động xác thực định dạng địa chỉ IP nhập vào.
- Hỗ trợ chuyển đổi nhập giữa các đoạn bằng bàn phím hoặc chuột.
Tổng kết
Thư viện điều khiển nội phong của SOUI4 mạnh mẽ và dễ mở rộng, có thể đáp ứng hầu hết các nhu cầu phát triển UI. Bằng cách sử dụng hợp lý các điều khiển này, có thể nhanh chóng xây dựng giao diện ứng dụng hiệu quả và đẹp mắt.
Phát triển và tích hợp điều khiển mở rộng
SOUI4 cung cấp thư viện điều khiển mở rộng phong phú, nhà phát triển có thể mở rộng chức năng bằng cách kế thừa điều khiển hiện có hoặc tạo điều khiển hoàn toàn mới. Dưới đây là hướng dẫn chi tiết phát triển và tích hợp để bạn nhanh chóng bắt đầu.
Cơ bản cấu trúc điều khiển mở rộng
Điều khiển mở rộng thường kế thừa từ các lớp điều khiển cơ sở của SOUI4 (như SWindow, SButton...), và thực hiện chức năng tùy chỉnh bằng cách ghi đè hoặc mở rộng phương thức. Ví dụ định nghĩa lớp điều khiển mở rộng điển hình:
lớp SDieuKhieuTuChinh : kế_thừa SWindow {
công:
SDieuKhieuTuChinh();
gia_tả ~SDieuKhieuTuChinh();
// Ghi đè phương thức vẽ
công ảo void Ve(IRenderTarget* pRT) ghi_dè;
// Phương thức tùy chỉnh
void ThietLapThuocTinh(int gia_tri);
// Xử lý tin nhắn
công ảo BOOL XuLyTinNhan(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult) ghi_dè;
riêng_tư:
int m_thuocTinhTuChinh;
};
Các bước phát triển
- Kế thừa lớp cơ sở
Chọn lớp cơ sở phù hợp (như
SWindow,SButton...) làm lớp cha, và ghi đè các phương thức quan trọng theo nhu cầu:
Ve: Thực hiện logic vẽ tùy chỉnh.XuLyTinNhan: Xử lý tin nhắn cửa sổ.- Các phương thức khác như
KichThuoc,DiChuyenChuot...
- Đăng ký điều khiển
Trong SOUI4, điều khiển mở rộng cần đăng ký thuộc tính và sự kiện thông qua macro
LOP_SOUI_TENvàTHUOC_TINH_SOUI_BAT_DAU. Ví dụ:
LOP_SOUI_TEN(SDieuKhieuTuChinh, L"dieukhieutu")
THUOC_TINH_SOUI_BAT_DAU(SDieuKhieuTuChinh)
THUOC_TINH_SOUI_SO_NGUYEN(L"thuoc_tinh_tu_chinh", FALSE) // Định nghĩa thuộc tính
THUOC_TINH_SOUI_KET_THUC()
- Tích hợp XML Sử dụng trực tiếp điều khiển mở rộng trong tệp bố cục XML:
<dieukhieutu vị_trí="10,10,200,100" thuoc_tinh_tu_chinh="42" />
- Xử lý sự kiện
Định nghĩa và kích hoạt sự kiện tùy chỉnh thông qua macro
SuKien:
BANG_SU_KIEN_BAT_DAU()
SU_KIEN_ID_LENH(1, XuLyNutNhan) // Xử lý sự kiện nhấn nút
BANG_SU_KIEN_KET_THUC()
Ví dụ: Điều khiển nút tùy chỉnh
Dưới đây là ví dụ hoàn chỉnh thực hiện điều khiển nút tùy chỉnh:
lớp SNutTuChinh : kế_thừa SButton {
công:
LOP_SOUI_TEN(SNutTuChinh, L"nuttu")
SNutTuChinh() : m_mauDiChuyenChuot(RGBA(255, 0, 0, 255)) {}
// Ghi đè phương thức vẽ
công ảo void Ve(IRenderTarget* pRT) ghi_dè {
if (m_bDiChuyenChuot) {
pRT->ToMauDayVung(GetClientRect(), m_mauDiChuyenChuot);
}
__super::Ve(pRT);
}
// Định nghĩa thuộc tính
THUOC_TINH_SOUI_BAT_DAU(SNutTuChinh)
THUOC_TINH_SOUI_MAU_SAC(L"mau_di_chuyen_chuot", FALSE) // Thuộc tính màu khi di chuyển chuột
THUOC_TINH_SOUI_KET_THUC()
// Xử lý thay đổi thuộc tính
công ảo void ThuocTinhMauDiChuyenChuot(const ChuoiW& strGiaTri, BOOL dangTai) {
m_mauDiChuyenChuot = LAYMAU(strGiaTri);
}
riêng_tư:
COLORREF m_mauDiChuyenChuot;
};
Sử dụng trong XML:
<nuttu vị_trí="10,10,100,30" văn_bản="Nhấp vào tôi" mau_di_chuyen_chuot="#FF0000" />
Quy trình tích hợp điều khiển
- Biên dịch điều khiển mở rộng Thêm mã điều khiển mở rộng vào dự án và đảm bảo biên dịch thành công.
- Đăng ký nhà sản xuất điều khiển Đăng ký điều khiển mở rộng khi khởi tạo ứng dụng:
ungDung->DangKyLopDieuKhieu<SNutTuChinh>();
ungDung->DangKyLopDieuKhieu<SDieuKhieuTuChinh>();
- Kiểm tra và gỡ lỗi Sử dụng điều khiển mở rộng trong bố cục XML và xác minh chức năng thông qua công cụ ghi nhật ký và gỡ lỗi.
Chức năng nâng cao
- Thuộc tính động
Thực hiện liên kết thuộc tính động thông qua
THUOC_TINH_SOUI_BAT_DAUvà phương thứcThuocTinh*. - Sự kiện tùy chỉnh
Sử dụng macro
SuKienđể định nghĩa và kích hoạt sự kiện, ví dụ:
BANG_SU_KIEN_BAT_DAU()
SU_KIEN_ID_LENH(1, SuKienTuChinh)
BANG_SU_KIEN_KET_THUC()
- Điều khiển ghép Thực hiện chức năng phức tạp bằng cách kết hợp nhiều điều khiển cơ bản, ví dụ:
lớp SDieuKhieuGhop : kế_thừa SWindow {
công:
SDieuKhieuGhop() {
m_pNut = new SButton(this);
m_pSua = new SEdit(this);
}
riêng_tư:
SButton* m_pNut;
SEdit* m_pSua;
};
Qua các bước trên, bạn có thể dễ dàng phát triển và tích hợp điều khiển tùy chỉnh vào dự án SOUI4, đáp ứng các nhu cầu UI đa dạng.
Tích hợp thư viện bên thứ ba (như Skia, Lua)
SOUI4 như một framework phát triển ứng dụng client Windows giàu chức năng, hỗ trợ tích hợp nhiều thư viện bên thứ ba để mở rộng chức năng và hiệu suất. Trong đó, Skia và Lua là hai thành phần tích hợp quan trọng, lần lượt được sử dụng cho kết xuất đồ họa và hỗ trợ kịch bản. Dưới đây là giới thiệu chi tiết về hai thư viện này và ứng dụng trong SOUI4.
Tích hợp Skia
Skia là thư đồ họa 2D mã nguồn mở, cung cấp khả năng kết xuất đồ họa hiệu suất cao. SOUI4 thông qua tích hợp Skia, thực hiện các tùy chọn kết xuất đồ họa linh hoạt, nhà phát triển có thể chọn GDI hoặc Skia làm hậu kết xuất theo nhu cầu.
Chức năng cốt lõi của Skia
- Kết xuất hiệu suất cao: Skia hỗ trợ tăng tốc phần cứng, có thể xử lý hiệu quả các thao tác đồ họa phức tạp.
- Hỗ trợ đa nền tảng: Skia không chỉ hỗ trợ Windows, mà còn hỗ trợ Linux, macOS và các nền tảng khác.
- API phong phú: Cung cấp API phong phú để vẽ đường dẫn, văn bản, hình ảnh và các chức năng khác.
Tích hợp Skia trong SOUI4
Trong SOUI4, tích hợp Skia chủ yếu thông qua lớp SRenderFactory_Skia. Dưới đây là ví dụ mã đơn giản, minh họa cách tạo mục tiêu kết xuất Skia:
BOOL TaoMucTieuKetuat(IRenderTarget **ppRenderTarget, int rong, int cao) {
*ppRenderTarget = new SRenderTarget_Skia(this, rong, cao);
return ĐÚNG;
}
Quy trình kết xuất Skia
Dưới đây là quy trình kết xuất Skia được đơn giản hóa:
Tích hợp Lua
Lua là ngôn ngữ kịch bản nhẹ, thường được sử dụng trong hệ thống nhúng và phát triển game. SOUI4 thông qua tích hợp Lua, thực hiện tách biệt logic UI và kịch bản, nâng cao hiệu suất phát triển.
Chức năng cốt lõi của Lua
- Nhẹ: Trình thông dịch Lua rất nhỏ gọn, phù hợp để nhúng vào các ứng dụng khác.
- Kiểu động: Hỗ trợ kiểu động, đơn giản hóa việc viết kịch bản.
- Mở rộng mạnh mẽ: Có thể mở rộng chức năng Lua thông qua C/C++.
Tích hợp Lua trong SOUI4
SOUI4 thực hiện hỗ trợ kịch bản Lua thông qua lớp SScriptModule_Lua. Dưới đây là ví dụ mã đơn giản, minh họa cách tạo mô-đun kịch bản Lua:
BOOL Kich_Bao_Lua_Tao_Thuc_Thể(IObjRef **ppScript) {
*ppScript = new SScriptModule_Lua();
return ĐÚNG;
}
Quy trình gọi kịch bản Lua
Dưới đây là quy trình gọi kịch bản Lua được đơn giản hóa:
Cấu hình và sử dụng thư viện bên thứ ba
Trong SOUI4, cấu hình thư viện bên thứ ba thường được thực hiện thông qua CMake. Dưới đây là đoạn cấu hình CMake ví dụ, minh họa cách bật hỗ trợ Skia và Lua:
lua_chọn(SỬ_DỤNG_SKIA "Bật hậu kết xuất Skia" BẬT)
lua_chọn(SỬ_DỤNG_LUA "Bật hỗ trợ kịch bản Lua" BẬT)
if(SỬ_DỤNG_SKIA)
tìm_gói(Skia BẬT_BUỘC)
thêm_định_nghĩa(-DSỬ_DỤNG_SKIA)
endif()
if(SỮ_DỤNG_LUA)
tìm_gói(Lua BẬT_BUỘC)
thêm_định_nghĩa(-DSỮ_DỤNG_LUA)
endif()
Bảng tổng kết
| Chức năng | Skia | Lua |
|---|---|---|
| Mục đích | Kết xuất đồ họa | Hỗ trợ kịch bản |
| Hiệu suất | Cao, hỗ trợ tăng tốc phần cứng | Nhẹ, thực thi thông dịch |
| Cách tích hợp | ||
| Tình huống sử dụng | Nhu cầu kết xuất đồ họa phức tạp | Logic UI động |
Qua nội dung trên, nhà phát triển có thể hiểu rõ hơn về cách tích hợp và sử dụng Skia với Lua trong SOUI4, từ đó nâng cao hiệu suất phát triển và tính linh hoạt của ứng dụng.
Thực hiện điều khiển tùy chỉnh và các trường hợp thực tế
SOUI4 cung cấp thư viện điều khiển mở rộng phong phú, nhà phát triển có thể đáp ứng các yêu cầu nghiệp vụ cụ thể bằng cách kế thừa điều khiển hiện có hoặc thực hiện điều khiển tùy chỉnh. Phần này sẽ giới thiệu cách thực hiện điều khiển tùy chỉnh và minh họa ứng dụng thông qua các trường hợp thực tế.
Các bước cơ bản thực hiện điều khiển tùy chỉnh
- Kế thừa lớp cơ sở
Điều khiển tùy chỉnh thường cần kế thừa từ
SWindowhoặc lớp con của nó (nhưSPanel,SButton...). Ví dụ,SHexEditkế thừa từSPanel,SChatEditkế thừa từSRichEdit. - Ghi đè các phương thức quan trọng Tùy theo nhu cầu ghi đè các phương thức sau:
Ve: Vẽ giao diện điều khiển.NutNhanTrai/NhaNutTrai: Xử lý sự kiện chuột.NutNhanPhim/NhaPhim: Xử lý sự kiện bàn phím.TinhKichThuoc: Tính toán kích thước điều khiển.
- Đăng ký điều khiển
Đăng ký điều khiển tùy chỉnh trong tệp bố cục XML thông qua thuộc tính
lớp, ví dụ:
<điều_khiển lớp="SHexEdit" tên="hex_edit" vị_trí="10,10,200,30"/>
- Thực hiện hỗ trợ thuộc tính
Định nghĩa thuộc tính điều khiển thông qua macro
SOUI_ATTRS, ví dụ:
THUOC_TINH_SOUI_BAT_DAU()
THUOC_TINH_SOUI_SO_NGUYEN(L"maxLength", m_nMaxLength, FALSE)
THUOC_TINH_SOUI_KET_THUC()
Trường hợp 1: Trình chỉnh sửa thập lục phân (SHexEdit)
Mô tả chức năng
SHexEdit là điều khiển trình chỉnh sửa hỗ trợ nhập thập lục phân, thường được sử dụng trong công cụ gỡ lỗi hoặc chỉnh sửa tệp nhị phân.
Điểm thực hiện chính
- Kế thừa từ
SPanel
lớp SHexEdit : kế_thừa SPanel {
// Mã thực hiện
};
- Ghi đè
VeVẽ ký tự thập lục phân và ký tự ASCII:
void SHexEdit::Ve(IRenderTarget *pRT) {
// Vẽ vùng thập lục phân
pRT->VanBan(m_strHex, m_strHex.GetLength(), &rcHex, TRÁI);
// Vẽ vùng ASCII
pRT->VanBan(m_strAscii, m_strAscii.GetLength(), &rcAscii, TRÁI);
}
- Xử lý nhập bàn phím
Ghi đè
NutNhanPhimlọc ký tự không phải thập lục phân:
BOOL SHexEdit::NutNhanPhim(UINT nChar, UINT nRepCnt, UINT nFlags) {
if (!isxdigit(nChar)) return SAI;
// Xử lý nhập
}
Ví dụ sử dụng
<điều_khiển lớp="SHexEdit" tên="hex_edit" vị_trí="10,10,300,200" maxLength="16"/>
Trường hợp 2: Khung nhập chat (SChatEdit)
Mô tả chức năng
SChatEdit là điều khiển nhập văn bản phong phú được nâng cao, hỗ trợ chèn biểu tượng và định dạng tin nhắn.
Điểm thực hiện chính
- Kế thừa từ
SRichEdit
lớp SChatEdit : kế_thừa SRichEdit {
// Mã thực hiện
};
- Chèn biểu tượng
Sử dụng phương thức
ChenDoiTuongchèn biểu tượng ảnh:
void SChatEdit::ChenBiểuTuong(LPCTSTR pszBiểuTuongId) {
IBitmap *pImg = LayHinhBiểuTuong(pszBiểuTuongId);
ChenDoiTuong(pImg);
}
- Hỗ trợ phím tắt
Ghi đè
NutNhanPhimthực hiện gửi nhanh:
BOOL SChatEdit::NutNhanPhim(UINT nChar, UINT nRepCnt, UINT nFlags) {
if (nChar == VK_RETURN && !(nFlags & KF_SHIFT)) {
KíchHoạtLenh(EventGuiTinNhan, LayVanBan());
return ĐÚNG;
}
return SRichEdit::NutNhanPhim(nChar, nRepCnt, nFlags);
}
Ví dụ sử dụng
<điều_khiển lớp="SChatEdit" tên="chat_edit" vị_trí="10,10,400,100" đa_dòng="đúng"/>
Trường hợp 3: Điều khiển đánh giá (SRatingBar)
Mô tả chức năng
SRatingBar là điều khiển sao hỗ trợ người dùng đánh giá.
Điểm thực hiện chính
- Kế thừa từ
SWindow
lớp SRatingBar : kế_thừa SWindow {
// Mã thực hiện
};
- Vẽ sao
Ghi đè
Vevẽ trạng thái đánh giá:
void SRatingBar::Ve(IRenderTarget *pRT) {
for (int i = 0; i < m_nSaoToiDa; i++) {
if (i < m_nDanhGia) VeSaoDay(pRT, i);
else VeSaoRong(pRT, i);
}
}
- Xử lý sự kiện chuột
Ghi đè
NutNhanTraicập nhật đánh giá:
void SRatingBar::NutNhanTrai(UINT nFlags, CPoint pt) {
int nDanhGiaMoi = TinhDanhGia(pt);
if (nDanhGiaMoi != m_nDanhGia) {
m_nDanhGia = nDanhGiaMoi;
HuyVe();
}
}
Ví dụ sử dụng
<điều_khiển lớp="SRatingBar" tên="rating_bar" vị_trí="10,10,200,20" maxStars="5" rating="3"/>
Tổng kết
Bằng cách kế thừa và mở rộng các lớp điều khiển cơ sở của SOUI4, nhà phát triển có thể nhanh chóng thực hiện các điều khiển chức năng phong phú. Bài viết đã minh họa ba phương pháp thực hiện điều khiển điển hình, nhà phát triển có thể mở rộng thêm chức năng theo nhu cầu thực tế.
Tổng kết
Hệ thống thành phần SOUI4 thông qua điều khiển nội phong, cơ chế mở rộng và tích hợp thư viện bên thứ ba, xây dựng framework phát triển UI linh hoạt và hiệu suất. Nhà phát triển vừa có thể sử dụng trực tiếp các điều khiển nội phong phong phú để nhanh chóng thực hiện chức năng, vừa có thể tạo điều khiển tùy chỉnh thông qua kế thừa và mở rộng, kết hợp với các thư viện bên thứ ba như Skia, Lua để nâng cao hiệu suất phát triển và khả năng biểu đạt. Các trường hợp minh họa (như trình chỉnh sửa thập lục phân, khung nhập chat...) đã chứng minh khả năng mở rộng mạnh mẽ của SOUI4 trong các tình huống thực tế.
【Liên kết tải miễn phí】soui4 Soui là một framework phát triển ứng dụng PC được duy trì và phát triển liên tục trong 14 năm, hiện đã hỗ trợ ba nền tảng PC là Windows, Linux và macOS, có thể sẽ hỗ trợ thêm các nền tảng di động trong tương lai, hãy cùng chờ đón! Địa chỉ dự án: https://gitcode.com/setoutsoft/soui4