Попробуйте так:
int pos;
QString str;
pos = ui->textEdit->textCursor().selectionStart();
str = ui->textEdit->textCursor().selectedText();
ui->textEdit->textCursor().setPosition(pos);
ui->textEdit->textCursor().insertText("<h1>"+str+"</h1>");
А проверять наличие выделенной части текста можно так:
ui->textEdit->textCursor().hasSelection()