最佳地将窗口标题替换为新的 QString



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

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

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

你可以尽可能多地更改标题,你不需要释放内存,只需给方法一个有效的字符串:

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

最新更新