1

さまざまなファイルを編集するためのタブを使用して、マルチファイルのテキストエディターを作成しています。これを行うには、ユーザーがテキストを編集できる QPlainTextEdit ウィジェットを保持する QTabWidget を使用しています。ユーザーが QPlainTextEdit 内のテキストを編集する場合、アスタリスク (*) を追加してタブのタイトルを変更し、このファイル内で行われた未保存の変更があることを示します。

私の現在の解決策は次のとおりです。

QTabWidget に新しいタブを追加します。

QPlainTextEdit* temp = new QPlainTextEdit("lots of text", this);
temp->setWindowTitle("the title of the tab");
connect(temp->document(), SIGNAL(contentsChanged()), this, SLOT(onTabContentChanged()));
mTabWidget->setCurrentIndex(mTabWidget->addTab(temp, temp->windowTitle()));

コンテンツの変更に対応するためのスロット:

void MainWindow::onTabContentChanged(void) {
// Content of a tabbed QPlainTextedit has changed; find it and set it to modified
QTextDocument* tempDocument = dynamic_cast<QTextDocument*>(sender());
if(tempDocument) {
    for (int var = 0; var < mTabWidget->count(); ++var) {
        QPlainTextEdit* tempTextedit =  dynamic_cast<QPlainTextEdit*>(mTabWidget->widget(var));
            if(tempTextedit) {
                if(tempDocument == tempTextedit->document()) {
                    tempTextedit->setWindowModified(true);
                    mTabWidget->setTabText(mTabWidget->indexOf(tempTextedit), "add a * here");
                }
            }
    }
}

}

私の意見では、sender() の使用は良くなく、これを行うには労力/コードが多すぎるため、間違っているか、これを行うためのより良い方法があると感じました。

何か案は?

使用:

Win7 プロ

Qt 5.3.2

4

1 に答える 1