Saat menggunakan myQTextEdit.append(), gaya teks yang disisipkan adalah sebagai berikut (dokumentasi Qt 5.14):

"Paragraf baru yang ditambahkan akan memiliki format karakter dan format blok yang sama dengan paragraf saat ini, ditentukan oleh posisi kursor."

Namun saya akan merasa nyaman untuk dapat menambahkan teks dengan gaya netral.

Apa yang menyebabkan masalah saya adalah ini: Saya memiliki jendela log dalam bentuk QTextEdit tempat saya menambahkan teks (kebanyakan netral tetapi beberapa elemen mungkin berwarna, dll.). Karena ini untuk tujuan log, QTextEdit bersifat read-only dan elemen teks selalu ditambahkan di akhir (append()). Ini baik-baik saja selama pengguna tidak pernah mengklik teks. Saat mengklik bagian dari QTextEdit, posisi kursor berubah. Ini bukan masalah untuk posisi karena saya menggunakan append() yang menyisipkan teks di akhir, bahkan jika kursor ada di tempat lain. Namun, jika pengguna mengklik sesuatu dengan gaya non-netral, teks yang ditambahkan setelahnya akan memiliki gaya ini juga, yang tidak diinginkan.

Yang menarik bagi saya adalah memblokir kursor sehingga pengguna tidak dapat mengubah gaya atau menambahkan tanpa mendasarkan gaya pada paragraf saat ini.

Apakah ada cara untuk mengubah perilaku ini, selain dengan mensubklasifikasikan QTextEdit?

Seperti yang disebutkan, saya dapat memeriksa posisi kursor sebelum melakukan append() (dan mengatur kursor di akhir dokumen jika telah dipindahkan) tetapi jika ada, saya lebih suka solusi yang lebih "global".

1
DylanM 17 Juni 2020, 12:22

1 menjawab

Jawaban Terbaik

Saya mencoba mereproduksi dalam MCVE yang dijelaskan oleh OP:

// Qt header:
#include <QtWidgets>

// main application
int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  // setup GUI
  QTextEdit qTextEdit;
  qTextEdit.show();
  // populate text editor
  qTextEdit.append(QString::fromUtf8(
    "<p>This is some text...</p>"
    "<p style='color: red'>...followed by more red text...</p>"
    "<p style='color: blue; font-weight: bold'>...followed by more fat blue text.</p>"));
  // test QTextEdit::append() like described by OP:
  qTextEdit.setTextCursor(QTextCursor(qTextEdit.document()->findBlockByNumber(1)));
  qTextEdit.append("TEST. (Reproduce what OP described.)");
  qTextEdit.append("<p>TEST. (A possible fix.)</p>");
  // runtime loop
  return app.exec();
}

Keluaran:

snapshot of MCVE

Jadi, perbaikan yang mungkin adalah menyediakan teks untuk ditambahkan dengan mark-up.

Jika itu hanya teks mentah, solusi paling sederhana adalah membungkusnya dalam "<p>" dan "</p>".

Btw. jika itu hanya teks mentah, saya akan merekomendasikan beberapa penyesuaian tambahan untuk menjadikannya HTML yang tepat sesuai dengan Subset HTML yang Didukung. Yaitu, saya akan mencari dan mengganti karakter meta XML biasa seperti yang saya lakukan, mis. dalam jawaban saya untuk SO: qt plaintextedit ubah warna pesan.

1
Scheff 17 Juni 2020, 13:23