在 QTabWidget 上使用 setWindowModified()
Use setWindowModified() on QTabWidget
因为 QTabWidget
继承了 QWidget
我们有 setWindowModified()
可用。
但它似乎不适用于标签标题:
ui->tab1->setWindowTitle(QString("%1[*]").arg(tr("Tab title")));
ui->tab1->setWindowModified(true);
但它既不显示“*”也不更改选项卡文本。
有没有办法自动处理这个问题而不是手动使用 setTabText()
?
我认为没有任何方法可以让选项卡文本默认跟随小部件标题。话虽如此,通过覆盖 QTabWidget::tabInserted
.
应该很容易修复
class tab_widget: public QTabWidget {
using super = QTabWidget;
using this_class = tab_widget;
public:
using super::super;
protected:
virtual void tabInserted (int index) override
{
super::tabInserted(index);
if (auto *w = widget(index)) {
connect(w, &QWidget::windowTitleChanged, this, &this_class::handle_window_title_change);
}
}
virtual void tabRemoved (int index) override
{
super::tabRemoved(index);
if (auto *w = widget(index)) {
disconnect(w, &QWidget::windowTitleChanged, this, &this_class::handle_window_title_change);
}
}
private:
void handle_window_title_change (const QString &title)
{
if (auto *w = qobject_cast<QWidget *>(sender())) {
setTabText(indexOf(w), title);
}
}
};
使用上面的 class 而不是 QTabWidget
应该会导致选项卡文本反映与该选项卡关联的小部件的标题。
因为 QTabWidget
继承了 QWidget
我们有 setWindowModified()
可用。
但它似乎不适用于标签标题:
ui->tab1->setWindowTitle(QString("%1[*]").arg(tr("Tab title")));
ui->tab1->setWindowModified(true);
但它既不显示“*”也不更改选项卡文本。
有没有办法自动处理这个问题而不是手动使用 setTabText()
?
我认为没有任何方法可以让选项卡文本默认跟随小部件标题。话虽如此,通过覆盖 QTabWidget::tabInserted
.
class tab_widget: public QTabWidget {
using super = QTabWidget;
using this_class = tab_widget;
public:
using super::super;
protected:
virtual void tabInserted (int index) override
{
super::tabInserted(index);
if (auto *w = widget(index)) {
connect(w, &QWidget::windowTitleChanged, this, &this_class::handle_window_title_change);
}
}
virtual void tabRemoved (int index) override
{
super::tabRemoved(index);
if (auto *w = widget(index)) {
disconnect(w, &QWidget::windowTitleChanged, this, &this_class::handle_window_title_change);
}
}
private:
void handle_window_title_change (const QString &title)
{
if (auto *w = qobject_cast<QWidget *>(sender())) {
setTabText(indexOf(w), title);
}
}
};
使用上面的 class 而不是 QTabWidget
应该会导致选项卡文本反映与该选项卡关联的小部件的标题。