簡體   English   中英

如何在Qt中更改窗口標題和中央窗口小部件?

[英]How to change window title and central widget in Qt?

嗨,我在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;

}

所以widgets-> currentIndex顯示了新窗口小部件的索引,但窗口中沒有任何更改。 窗口標題也是同樣的問題 - 方法windowTitle()返回新標題,但標題欄上的標題是舊的。 為什么? 如果我在Quiz :: myClicked中更改標題:

parent->setWindowTitle("newTitle");

有用! 為什么它有多奇怪? 請幫忙。

有用! 為什么它有多奇怪? 請幫忙。

這並不奇怪。 這就是Qt API的設計方式。 有關說明 ,請參閱文檔

windowTitle:QString

此屬性包含窗口標題(標題)。

此屬性僅適用於頂級窗口小部件,例如窗口和對話框。

讓我們分析最后一句:你的測驗既不是QMainWindow ,也不是QDialog ,因此它無法工作。 Windows標題僅對基於文檔的人有意義。 當你在父母上調用它時,它將分別起作用,因為它是一個QMainWindow

標題欄顯示MainWindow的標題。 您的測驗小部件位於MainWindow的“內部”,因此不會顯示其標題。

如果要更改標題欄文本,則必須調用MainWindow::setWindowTitle()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM