2012-04-20 35 views
10

Tôi muốn đặt khoảng cách dòng của QTextEdit.Đặt khoảng cách dòng trong QTextEdit

Đó là không có vấn đề để có được thông tin đó với

QFontMetrics::lineSpacing(); 

Nhưng làm thế nào để thiết lập đó?

Tôi đã thử với stylesheets, nhưng điều đó không làm việc:

this->setStyleSheet("QTextEdit{ height: 200%; }"); 

hoặc

this->setStyleSheet("QTextEdit{ line-height: 200%; }"); 

giải pháp từng phần:

Vâng, tôi đã tìm thấy một giải pháp - không phải theo cách tôi muốn, nhưng ít nhất nó đơn giản và nó mang lại gần như hành vi dự định của tôi, đủ cho chứng minh khái niệm của tôi.

Trên mỗi dòng mới, có một số dòng. Nhưng nếu bạn chỉ cần gõ cho đến khi văn bản được tự động gói vào một dòng mới, bạn sẽ không có khoảng cách giữa hai dòng này. Hack này chỉ hoạt động với các khối văn bản, xem mã.

Chỉ cần nhớ rằng đó là sức mạnh vũ phu và một bản hack xấu xí. Nhưng nó cung cấp một số loại dòng-khoảng cách để QTextEdit đẹp của bạn. Gọi nó mọi lúc văn bản của bạn thay đổi.

void setLineSpacing(int lineSpacing) { 
    int lineCount = 0; 
    for (QTextBlock block = this->document()->begin(); block.isValid(); 
      block = block.next(), ++lineCount) { 
     QTextCursor tc = QTextCursor(block); 
     QTextBlockFormat fmt = block.blockFormat(); 
     if (fmt.topMargin() != lineSpacing 
       || fmt.bottomMargin() != lineSpacing) { 
      fmt.setTopMargin(lineSpacing); 
      //fmt.setBottomMargin(lineSpacing); 
      tc.setBlockFormat(fmt); 
     } 
    } 
} 
+0

Tuy nhiên, một giải pháp tốt sẽ rất quan tâm. – qwc

Trả lời

4

QFontMetrics chứa thuộc tính tĩnh (mỗi tên) đến từ tệp phông chữ. Thủ đô "C" rộng bao nhiêu, v.v. lineSpacing() giúp bạn có khoảng cách tự nhiên trong khoảng cách đơn mà người thiết kế phông chữ được mã hóa thành chính phông chữ đó. Nếu bạn thực sự muốn thay đổi rằng (bạn không) ... những câu chuyện hơi phức tạp như thế nào được kể ở đây:

http://fontforge.sourceforge.net/faq.html#linespace

Đối với khoảng cách dòng trong một QTextEdit ... nó trông (với tôi) như thế được coi là một trong những điều mà rơi theo mô hình mở rộng Qt của để xác định văn bản "bố trí":

http://doc.qt.io/qt-4.8/richtext-layouts.html

bạn sẽ cung cấp lớp bố trí của riêng bạn để QTextDocument thay vì sử dụng mặc định . Ai đó đã thử nó ở đây nhưng không đăng mã hoàn thành của họ:

http://www.qtcentre.org/threads/4198-QTextEdit-with-custom-space-between-lines

+0

Địa ngục, tại sao tôi không vấp ngã? Tôi sẽ thử ngay lập tức. :) – qwc

+0

Được rồi, vẽ văn bản tĩnh thật dễ dàng. Nhưng việc bố trí văn bản có thể chỉnh sửa trong QTextEdit đi xung quanh một số cạnh thô. – qwc

+0

Không ngạc nhiên. Bạn có thể thử làm việc từ nguồn cho QTextLayout mặc định cho phiên bản Qt của bạn, có lẽ kế thừa từ nó và ghi đè lên các bit bạn nghĩ bạn cần? Trong 4.7, đó là: http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/text/qtextlayout.cpp – HostileFork

Các vấn đề liên quan