Изменение названия окон при переключении их с помощью QtSackedWidget

При использовании QtStackedWidget для переключения окон в большом проекте он, похоже, не учитывает часть " setWindowTitle ", добавляемую в каждое окно, и даже для размера он принимает только первый размер, точный в объявлении QtStackedWidget. Это странно. Любое уточнение, которое я здесь, чтобы прочитать.

  • Итак, мой вопрос:

    - позволяет ли QtStackedWidget изменять заголовок окна каждый раз, когда мы переключаем окно?

    -А как насчет размера это фиксированный или динамический?

1 ответ

Из документации Qt setWindowTitle

Это свойство имеет смысл только для виджетов верхнего уровня, таких как окна и диалоги. Если заголовок не был установлен, заголовок основан на windowFilePath. Если ни один из них не установлен, тогда заголовок является пустой строкой.

Вы можете подключить QStackedWidget сигналы к QMainWindow

Вот рабочий пример:

#include <QPushButton>
#include <QHBoxLayout>
#include <QLabel>
#include <QStackedWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{

    QWidget * poCentral = new QWidget(this);
    QVBoxLayout * poVLayout  = new QVBoxLayout;
    QHBoxLayout * poHBtnLayout  = new QHBoxLayout;
    QStackedWidget * poMyStackedWidget = new QStackedWidget(this);
    QPushButton * poNextPage = new QPushButton("Next page", this);

    this->setWindowTitle("Page: 0");

    // switch stacked pages
    connect(poNextPage, &QPushButton::clicked,
            [=]()
    {
        int iPageIndex = poMyStackedWidget->currentIndex() + 1;
        if (iPageIndex >= poMyStackedWidget->count())
        {
            poMyStackedWidget->setCurrentIndex(0);
        }
        else
        {
            poMyStackedWidget->setCurrentIndex(iPageIndex);
        }
        // set window title
        poMyStackedWidget->setWindowTitle(QString("Page: %1").arg(poMyStackedWidget->currentIndex()));
    });

    // Connect the signlas so the main window will display the title.
    connect(poMyStackedWidget, &QStackedWidget::windowTitleChanged,
            this, &MainWindow::setWindowTitle);

    // UI layout
    poHBtnLayout->addWidget(poNextPage);
    poVLayout->addLayout(poHBtnLayout);
    poVLayout->addWidget(poMyStackedWidget);
    poCentral->setLayout(poVLayout);

    // Add dumy pages
    poMyStackedWidget->insertWidget(0,new QLabel("First page", this));
    poMyStackedWidget->insertWidget(1,new QLabel("Second page", this));
    poMyStackedWidget->insertWidget(2,new QLabel("third page", this));

    this->setCentralWidget(poCentral);

}
Другие вопросы по тегам