2014-11-04 3 views
0

Я реализую режим фокусировки в QT QTextEdit, в котором я выделяю одну строку, в которой присутствует курсор. Пока я могу включить режим фокусировки, но когда я отключу режим фокусировки, я хочу, чтобы состояние было восстановлено до того, что было.Clear ExtraSelections Qt on slot disconnect

Функция, которая требует подключения и отключения является:

void MainWindow::onFocus_Mode_triggered() 
{ 
    QTextEdit *texed = qobject_cast<QTextEdit*>(ui->tabWidget->currentWidget()); 
    if(ui->actionFocus_Mode->isChecked()){ 
     connect(texed, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine())); 
    } 
    else { 
     disconnect(texed, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine())); //First disconnect and then call method to clear ExtraSelections 
     BacktoNormal(); //Help needed in implementing this 
    } 
} 

Теперь, когда пункт меню actionFocus_Mode проверяется, линия, где курсор находится в данный момент присутствует выделена желтым цветом с помощью функции, приведенной ниже.

void MainWindow::highlightCurrentLine() { 

    QTextEdit *texed = qobject_cast<QTextEdit*>(ui->tabWidget->currentWidget()); 
    QList<QTextEdit::ExtraSelection> extraSelections; 
    QTextEdit::ExtraSelection selection; 
    QColor lineColor = QColor(Qt::yellow).lighter(160); 

    selection.format.setBackground(lineColor); 
    selection.format.setProperty(QTextFormat::FullWidthSelection, true); 
    selection.cursor = texed->textCursor(); 
    selection.cursor.clearSelection(); 
    extraSelections.append(selection); 

    texed->setExtraSelections(extraSelections); 
} 

Так я могу выделить его в желтый цвет, но если (! Ui-> actionFocus_Mode-> IsChecked()), то есть, если пункт меню (режим фокусировки) снят, то я хотел бы вернуться к нормальной жизни Режим. Как реализовать функцию BacktoNormal().

Что я сейчас думаю, так это то, что я должен установить прозрачность линии или что-то вернуть ее в нормальное состояние (если это вообще возможно). Мне не удалось найти что-то связанное с этим. Любая помощь будет полезна, поскольку я полностью застрял в этой точке.

ответ

1

В вашем BackNormal попробуйте установить только ничего как дополнительный выбор.

QTextEdit *texed = qobject_cast<QTextEdit*>(ui->textEdit); 
    QList<QTextEdit::ExtraSelection> extraSelections; 
    QTextEdit::ExtraSelection selection; 
    QColor lineColor = QColor(Qt::yellow).lighter(160); 

    selection.format.setBackground(lineColor); 
    selection.format.setProperty(QTextFormat::FullWidthSelection, true); 
    selection.cursor = texed->textCursor(); 
    selection.cursor.clearSelection(); 
    extraSelections.append(selection); 
    extraSelections.clear();//nothing 

    texed->setExtraSelections(extraSelections); 

Когда я попробовал это на своем компьютере (с другим кодом), этот выбор был успешно удален.

Меньшая версия:

QTextEdit *texed = qobject_cast<QTextEdit*>(ui->textEdit); 
    QList<QTextEdit::ExtraSelection> extraSelections;//empty list 
    texed->setExtraSelections(extraSelections); 
+0

Совершенная. Спасибо. Черт! Это было так просто, и я думал совсем в другом направлении. – Bhavyanshu

+1

@Bhavyanshu Добро пожаловать. :) Это место было создано для этой цели, иногда свежий взгляд других людей может сэкономить много времени. – Chernobyl