我正在编写基于Qt的应用程序,每次用户更改活动文档时都需要更新MainWindow标题。标题的构建如下:“ AppName-DocumentName”。
如果我理解正确,那么当我通过QWidget::setWindowTitle
方法设置新标题时,旧的QString
标题将被释放并设置新标题。但是在我的应用程序执行期间,这可能会导致很多malloc / free调用。
是否可以为标题QString
预先分配一些冗长的DocumentName字符串,并在第一个setWindowTitle
之后获得对这个新标题字符串的引用(而不是副本),以便仅替换现有标题中的所需部分,然后以某种方式强制刷新此更新的标题?
答案 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);
}