如何在Qt中更改窗口标题和中心部件?

5

你好,我在Qt中更改窗口标题和中央小部件方面遇到了问题。这里是MainWindow:

class MainWindow : public QMainWindow
  {
// (...)
  QStackedWidget* widgets;
  Quiz* widget1, *widget2;
  }

有一个名为Quiz的类:

class Quiz : public QWidget
  {
  public slots:
    void myClicked();
  }

我希望在单击Quiz元素的按钮(与myClicked插槽连接)后更改MainWindow的标题。

void Quiz::myClicked()
 {
 static_cast<MainWindow>(parent).myFunction();
 }

void MainWindow::myFunction()
{
widget2 = new Quiz(this,2);
widgets->addWidget(widget2);
std::cout<<"current wdgt: " << widgets->currentIndex() << std::endl; // shows: 0
widgets->setCurrentWidget(widget2);
std::cout<<"current wdgt " << widgets->currentIndex() << std::endl; // shows: 1

setWindowTitle("newTitle");
std::cout<<"Title is " << windowTitle().toStdString() << std::endl;

}

因此,widgets->currentIndex显示新小部件的索引,但我的窗口中没有任何更改。窗口标题也有同样的问题——windowTitle()方法返回新标题,但标题栏上的标题仍然是旧的。为什么呢? 如果我通过以下方式更改Quiz::myClicked中的标题:

parent->setWindowTitle("newTitle");

它可以工作!为什么它能够工作,真是奇怪?请帮忙。

2个回答

2
它是正常的。这就是Qt API的设计方式。请查看文档以获取解释:文档
windowTitle:QString
此属性保存窗口标题(标题)。
此属性仅对顶级小部件(例如窗口和对话框)有意义。
让我们分析最后一句话:您的测验既不是QMainWindow,也不是QDialog,因此它无法工作。根据文档,只有基于这些窗口才有意义。当您在父项上调用它时,它将相应地工作,因为那是QMainWindow。

谢谢您的解释!我直接将Quiz中的按钮连接到MainWindow中的myFunction,现在一切正常。 - trivelt

1
标题栏显示主窗口的标题。您的测试小部件位于“MainWindow”中,因此它们的标题不会显示出来。
如果您想更改标题栏文本,则必须调用MainWindow::setWindowTitle()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接