用新的QString

时间:2019-02-14 12:34:04

标签: c++ qt

我正在编写基于Qt的应用程序,每次用户更改活动文档时都需要更新MainWindow标题。标题的构建如下:“ AppName-DocumentName”。

如果我理解正确,那么当我通过QWidget::setWindowTitle方法设置新标题时,旧的QString标题将被释放并设置新标题。但是在我的应用程序执行期间,这可能会导致很多malloc / free调用。

是否可以为标题QString预先分配一些冗长的DocumentName字符串,并在第一个setWindowTitle之后获得对这个新标题字符串的引用(而不是副本),以便仅替换现有标题中的所需部分,然后以某种方式强制刷新此更新的标题?

1 个答案:

答案 0 :(得分:0)

您可以尽可能地更改标题,不需要释放内存,只需为方法提供有效的字符串即可

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);
}