問題タブ [qplaintextedit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QPlainTextEdit 履歴を行単位で切り捨てる
主な部分がQPlainTextEditである GUI アプリケーションがあります。アプリケーションのログを表示するために使用され、関連するテキストは行ごとに無限に大きくなります。
アプリケーションは非常に長時間実行することを目的としているため、このログに割り当てられるメモリを制限する必要があります。したがって、到達したときに履歴が切り捨てられることを確認するmaxNumLines
またはmaxNumCharacters
パラメーターが必要です。つまり、新しい行が追加されると、見出し行が削除されます (別名ログローテーション)。
これを達成するために、関数を見つけました
したがって、このテストされていないコードのようなものは、おそらくうまくいくでしょう:
これは、から最初の行を削除する方法QPlainTextEdit
ですか? おそらく、このタスクにより適した他のQt Text GUI要素がありますか(最大行数を設定し、リストの先頭で切り捨てQStringList
ますerase(0)
)。
それとも QPlainTextEdit は最終的に、関連付けられた QString のサイズの上限を最終的に実装しますか?
c++ - QPlainTextEdit が std::bad_alloc を投げる
一部のデータに対して最小二乗法を実行するプログラムがあります。このプロシージャは別のスレッドで実行され、ダイアログ ボックスから制御されます。このダイアログ ボックスには、フィッティングの更新と最終レポートを表示する QPlainTextEdit があります。
ダイアログは Qt Designer で作成され、コードは QtCreator で実行され、私の Qt バージョンは 4.8.1 です。
私が直面している問題は、やや不安定です。手順を初めて実行するときは、すべて問題ありません。その後、もう一度実行すると、プログラムがクラッシュしてメッセージが表示されることがあります
'std::bad_alloc' what() のインスタンスをスローした後に呼び出された終了: std::bad_alloc プログラムが予期せず終了しました。
QPlainTextEdit の clear() メソッドの呼び出しの問題を追跡しました。ここにいくつかのコードがあります。
txtInfo
QPlainTextEdit オブジェクトです。オブジェクトが作成されたときに を呼び出してtxtInfo->clear()
、空のテキスト編集を表示します。「実行」ツール ボタンをクリックすると、そのデフォルト スロットが新しいスレッドを開始する実行シグナルを発します。QPlainTextEdit は、txtInfo
終了するまでこのスレッドで更新されます (実際、スレッドは、メイン アプリケーションでキャッチされるシグナルを発し、次に を呼び出しますUpdateDisplay
)。
もう一度実行ボタンをクリックすると、クラッシュとエラーが発生します。txtInfo->clear()
、txtInfo->document()->clear()
、 、txtInfo->setPlainText("")
または byを置き換えるとtxtInfo->document()->setPlainText("")
、問題は同じです (2 回目の実行でクラッシュします)。頻繁ではありませんが、時折、クラッシュする前に数回 (10 回程度) 実行できます。
最後に、行をコメント アウトすると、txtInfo->clear()
実行した回数だけルーチンを実行できます (あるテストでは、約 80 回実行した後に疲れました)。
私の唯一の(ほぼランダムな)推測は、問題がスレッドからの更新に何らかの形で関連していることです(キャッチされたシグナルを発し、UpdateDisplay
関数を呼び出すだけです)。私がそう思う理由は、シグナルをコメントアウトして、UpdateDisplay
偽の情報で呼び出すための新しいボタンを作成すれば、すべて問題ないからです。
問題のある行の前のAqApp->processEvents()
は効果がありません。
私はここで立ち往生しています。どんなアイデアでも大歓迎です。たとえば、clear()
メソッドの呼び出しに問題がないことを確認するために実行できるテストはありますか?
qt - Adding end line marker in QPlainTextEdit
に80文字をマークする縦線を追加したいと思いQPlainTextEdit
ます。ドキュメントを見ましたが、ドキュメントに何も表示されませんでした。どういうわけか自分でペイントする必要がありますか?
c++ - 改行を追加せずにQPlainTextEditにテキストを追加し、下部をスクロールし続けるにはどうすればよいですか?
テキストに改行を追加せずにテキストを追加する必要がありQPlainTextEdit
ますが、どちらの方法appendPlainText()
でもappendHtml()
実際には新しい段落が追加されます。
私はそれを手動で行うことができますQTextCursor
:
それは機能しますが、追加する前にスクロールが一番下にあった場合は、一番下にスクロールし続ける必要があります。
Qtのソースからロジックをコピーしようとしましたが、実際にはQPlainTextEditPrivate
クラスが使用されており、それなしでは同じことを行う方法が見つからないため、それに固執しました。たとえば、にメソッドverticalOffset()
が表示されませんQPlainTextEdit
。
実際、これらのソースには(少なくとも一見すると)多くの奇妙なものが含まれており、これを実装する方法がわかりません。
ソースコードは次のとおりです:http append()
://code.qt.io/cgit/qt/qt.git/tree/src/gui/widgets/qplaintextedit.cpp#n2763
qt - QTextEditシフトタブの間違った動作
shift + tabは、QTextEdit/QPlainTextEditのタブとして動作します。
良い解決策がない一般的な問題のように見えます。
タブがインデントレベルを上げ、Shift-Tabがインデントレベルを下げるときに、この機能を有効にする「古典的な」方法はありますか?
c++ - QPlainTextEdit - 何行含めることができますか?
オーバーフローして垂直スクロールバーが表示される前に、QPlainTextEdit コントロール (特定のサイズ) に収まる行数を何らかの方法で計算することは可能ですか?
qt - Qtテキストエディットのスムーズなスクロール
Qtでは、テキスト領域で「スムーズなスクロール」を行うことはできますか?QPlainTextEdit
つまり、編集可能なテキスト領域に使用する「コードエディタ」と呼ばれるこのQtデモがあります。エリアをスクロールすると、常に一度に1行全体がジャンプします。つまり、一番上の行が常に完全に表示されます。
たとえば、HTMLでは、テキスト領域はコンテンツを「スムーズに」スクロールします。つまり、1ピクセルだけでもコンテンツをスクロールして、上の行を部分的に非表示にすることができます。
Qtでこのような動作をすることは可能ですか?おそらく別のウィジェットを使用することによって?
qt - QPainTextEdit波線を追加
私は、OracleとDB2のSQLプロシージャを作成するための優れたツールである小さなSQLIDEアプリに取り組んでいます。GUIベースとしてQt4を使用しています。それでも、My SQL IDEにインスタント文法チェック機能を追加したいのですが、VS2010やEclipseと同じように、SQLコードの下に文法エラーのあるウェーブラインを書き込みます。しかし、私は本当にこの関数をどのように扱うかを知りません。ドキュメント編集クラスにQPlainTextEditを使用しました。ヒントやヒントをいただければ幸いです。お時間をいただきありがとうございます!
qt - QTextCursor と beginEditBlock
QPlainTextEdit に、すべての行が 10 個のスペースで始まるテキストがあります。
次に、いくつかの行を選択し、ループで選択したすべての行から最初の 2 つのスペースを削除します。
問題は、上記のコードが最後に選択された行を「損傷」することです-まるである種の行末マーカーを削除したかのように-最後の行の終わりにジャンプしたいとき、カーソルはその下の行に移動します。 1番目と2番目のキャラクター。編集後、選択範囲でさえ正しく表示されません。最後の行を除くすべての行で選択インジケーターがウィンドウの右端まで拡張され、最後の行のインジケーターは行と同じ幅しかありません。
削除するbeginEditBlock()
と、endEditBlock()
すべて正常に動作します。
なぜこれが起こっているのか誰か知っていますか?