我正在编写基于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);
}