在Qt中处理多个窗口

Handling multiple windows in Qt

本文关键字:窗口 处理 Qt      更新时间:2023-10-16

我使用QStackedWidget来处理Qt应用程序中的多个窗口/窗体根据这个问题

我使用这个模式:

  1. 将所有小部件对象添加到mainwindow.cpp的QStackedWidget
  2. 在请求更改窗口时从子窗口获取信号
  3. 主窗口替换窗口(它更新右边槽中的QStackedWidget)

问题:

这是正确的方法吗?我的应用程序中有很多窗口,我希望确保这是常见的最佳实践。这个模式意味着我有指向主窗口中所有窗口的指针。

我的一段代码:mainwindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   mnuWin = new Menu();
   singlePulseWin = new SinglePulse();
   repetitive = new Repetitive();
   treatmentType = new TreatmentType();
   //... and so on ....
   connect(mnuWin,&Menu::updateMainWindowStackWidget,this,&MainWindow::onChangeWindowRequested);
   connect(singlePulseWin,&SinglePulse::updateMainWindowStackWidget,this,&MainWindow::onChangeWindowRequested); 
   connect(repetitive,&Repetitive::updateMainWindowStackWidget,this,&MainWindow::onChangeWindowRequested);
   connect(treatmentType,&TreatmentType::updateMainWindowStackWidget,this,&MainWindow::onChangeWindowRequested);
   //... and so on ....
   ui->pagesWidget->addWidget(mnuWin);
   ui->pagesWidget->addWidget(singlePulseWin);
   ui->pagesWidget->addWidget(repetitive);
   ui->pagesWidget->addWidget(treatmentType);
   //... and so on ....
   ui->pagesWidget->setCurrentIndex(0);
}   
void MainWindow::onChangeWindowRequested(int ind)  //slot
{
    ui->pagesWidget->setCurrentIndex(ind);
}

menu.cpp:

void Menu::on_btnMenuSinglePulse_clicked()
{
   emit updateMainWindowStackWidget(1);
}
void Menu::on_btnMenuRepetitive_clicked()
{
   emit updateMainWindowStackWidget(2);
}
void Menu::on_btnMenuBurst_clicked()
{
   emit updateMainWindowStackWidget(3);
}

QStackedWidget是处理多窗口的好方法。为什么不把按钮放在主窗口,这样你就可以更方便地改变pagesWidget的currentWidget,而不是创建信号槽