2012-01-24 36 views
5

Sự cố: Tôi muốn triển khai tiện ích chỉnh sửa văn bản cho văn bản có thẻ bổ sung. Tôi muốn một số thẻ bị ẩn trong một số trường hợp để chúng không làm sao lãng người dùng.Ẩn văn bản bằng QSyntaxHighlighter

Môi trường: Tôi đang sử dụng PyQt và thích sử dụng QPlainTextWidgetQSyntaxHighlighter.

Phương pháp tiếp cận: Với QSyntaxHighlighter Tôi có thể đặt QTextCharFormat cho các chuỗi phù hợp với yêu cầu của tôi. QTextCharFormat cung cấp cho tôi tất cả các thuộc tính phông chữ như kích thước, màu sắc, v.v. nhưng: Tôi không tìm thấy tùy chọn để ẩn văn bản hoặc giảm kích thước của văn bản xuống 0.

Tôi không muốn xóa hoặc thay thế thẻ vì điều này sẽ giới thiệu nhiều mã hơn (sao chép phải chứa thẻ và không thể sử dụng QSyntaxHighlighter để định dạng văn bản còn lại theo thẻ).

Cập nhật: Cho đến nay tôi đã tìm thấy một bản hack xấu xí. Bằng cách đặt QTextFormat :: FontLetterSpacing thành một giá trị nhỏ, văn bản sẽ tiêu thụ ít không gian hơn. Kết hợp với màu trong suốt, văn bản giống như vô hình.

Bài toán: Trong thử nghiệm của tôi, điều này chỉ làm việc cho các khoảng cách thư xuống 0,016%. Bên dưới khoảng cách được đặt lại thành 100%.

+0

Vâng, văn bản đơn giản là văn bản đơn giản. Hãy thử sử dụng tiện ích con không đồng bằng. –

+0

Tôi chưa tìm thấy các tùy chọn tương ứng trong 'QTextEdit'. AFAIK sự khác biệt được giới hạn trong hành vi cuộn, bảng, khung và những thứ như hình ảnh. Các chức năng có thể cho phép ẩn văn bản cũng tương tự như đối với 'QPlainTextEdit'. Khác sau đó có mo lớp nâng cao hơn bên trong Qt. QScintilla có nghĩa là sử dụng một cái gì đó hoàn toàn khác. – m2j

Trả lời

3

Bạn có thể sử dụng số QTextDocument cơ bản cho việc này. Nó bao gồm các khối có khả năng hiển thị có thể được bật và tắt bằng cách sử dụng setVisible. Sử dụng QTextCursor để chèn văn bản và các khối mới và chuyển đổi chế độ hiển thị. Như một tiền thưởng, chức năng sao chép sao chép nội dung của các khối không nhìn thấy được.

Ghi chú: Xem documentation của QTextCursor để biết thêm thông tin. Trong another question ở đây đã được báo cáo rằng thiết lập khả năng hiển thị không hoạt động trên QTextEdits.

Ví dụ:

from PyQt5 import QtWidgets, QtGui 

app = QtWidgets.QApplication([]) 

w = QtWidgets.QPlainTextEdit() 
w.show() 

t = QtGui.QTextCursor(w.document()) 
t.insertText('plain text') 
t.insertBlock() 
t.insertText('tags, tags, tags') 
t.block().setVisible(False) 

print(w.document().toPlainText()) 

app.exec_() 
Các vấn đề liên quan