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

时间:2014-03-15 21:01:52

标签: c++ qt qwidget qtgui qmainwindow

嗨,我在Qt中更改窗口标题和中央窗口小部件时遇到问题。 有MainWindow:

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

并且有一个类测验:

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

我想在点击按钮后更改MainWindow标题,该按钮是测验的一个元素(并且它与插槽myClicked连接)。

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;

}

所以小部件 - &gt; currentIndex显示新小部件的索引,但在我的窗口中没有任何改变。窗口标题也是同样的问题 - 方法windowTitle()返回新标题,但标题栏上的标题是旧的。为什么? 如果我在Quiz :: myClicked中更改标题:

parent->setWindowTitle("newTitle");

它有效!为什么它有多奇怪?请帮忙。

2 个答案:

答案 0 :(得分:2)

  

它有效!为什么它有多奇怪?请帮忙。

这并不奇怪。这就是Qt API的设计方式。有关说明,请参阅documentation

  

windowTitle:QString

     

此属性包含窗口标题(标题)。

     

此属性仅适用于顶级窗口小部件,例如窗口和对话框。

让我们分析最后一句:你的测验不是QMainWindow,也不是QDialog,因此无法运作。 Windows标题仅对基于文档的人有意义。当您在父级上调用它时,它将分别起作用,因为它是QMainWindow

答案 1 :(得分:1)

标题栏显示MainWindow的标题。您的测验小部件位于MainWindow的“内部”,因此它们的标题不会显示。

如果要更改标题栏文字,则必须拨打MainWindow::setWindowTitle()