Оптимальная замена windowTitle новым QString - PullRequest
0 голосов
/ 14 февраля 2019

Я пишу приложение на основе Qt, и мне нужно обновлять заголовок MainWindow каждый раз, когда пользователь изменяет активный документ.Название строится следующим образом: «AppName - DocumentName».

Если я правильно понимаю, когда я устанавливаю новый заголовок с помощью метода QWidget::setWindowTitle, старый заголовок QString освобождается, а новый устанавливается.Но это может привести к множеству вызовов malloc / free во время выполнения моего приложения.

Можно ли предварительно выделить QString для заголовка с некоторым запасным для длинной строки DocumentName и после 1-го setWindowTitle получить ссылку (а не копию) на эту новую строку заголовка, чтобы затем толькозаменить необходимую часть в существующем заголовке, а затем каким-то образом принудительно обновить этот обновленный заголовок?

1 Ответ

0 голосов
/ 14 февраля 2019

вы можете изменить заголовок настолько, насколько это возможно, вам не нужно освобождать память, просто укажите правильную строку для метода:

setWindowTitle(const QString &);

В следующем примере изменяется заголовок, устанавливающий дату и времякаждую секунду:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myTimer = new QTimer(this);
    myTimer->setInterval(1000);
    connect(myTimer, &QTimer::timeout, this, &MainWindow::changeWinTitle);
    myTimer->start();
}

MainWindow::~MainWindow()
{
    delete ui;
    myTimer->stop();
    delete myTimer;
}

void MainWindow::changeWinTitle()
{
    auto dateString{"Now: " + QDateTime::currentDateTime().toString()};
    qDebug() << dateString;
    this->setWindowTitle(dateString);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...