当创建一个使用Qt框架的多窗口应用程序时,以下是一些详细的步骤和操作说明:
-
打开Qt开发环境(如Qt Creator)并创建一个新的Qt Widgets应用程序项目。
-
在项目中创建两个窗口类:AMainWindow和BMainWindow。可以使用Qt的界面设计器来创建这些窗口的UI文件(amainwindow.ui和bmainwindow.ui)。
- 在Qt Creator的项目资源视图中,右键单击项目文件夹,选择"添加新"->"Qt"->"Qt Designer Form Class"。
- 在对话框中选择"Qt Widgets"作为基类,输入类名(AMainWindow或BMainWindow),然后点击"下一步"。
- 在下一个对话框中,选择"创建一个窗口小部件",然后点击"完成"。
- 这将为您创建一个相应的UI文件(amainwindow.ui或bmainwindow.ui)以及相关的头文件(ui_amainwindow.h或ui_bmainwindow.h)。(拖拽按钮后记得右击转到槽,选第一个)
-
在AMainWindow类的头文件(amainwindow.h)中,声明信号
ASignal()
和槽函数AmySlot()
、AmySlot2()
以及on_pushButton_clicked()
。// amainwindow.h #ifndef AMAINWINDOW_H #define AMAINWINDOW_H #include <QMainWindow> #include "bmainwindow.h" namespace Ui { class AMainWindow; } class AMainWindow : public QMainWindow { Q_OBJECT public: explicit AMainWindow(QWidget *parent = 0); ~AMainWindow(); signals: void ASignal(); private slots: void AmySlot(); void AmySlot2(); void on_pushButton_clicked(); private: Ui::AMainWindow *ui; BMainWindow *mB; }; #endif // AMAINWINDOW_H
- 在AMainWindow类的源文件(amainwindow.cpp)中实现构造函数、析构函数和槽函数。
// amainwindow.cpp #include "amainwindow.h" #include "ui_amainwindow.h" AMainWindow::AMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::AMainWindow) { ui->setupUi(this); // 连接信号ASignal()和槽函数AmySlot() connect(this, SIGNAL(ASignal()), this, SLOT(AmySlot())); // 创建BMainWindow实例,并连接其信号BSignal()和槽函数AmySlot2() mB = new BMainWindow(this); connect(mB, SIGNAL(BSignal()), this, SLOT(AmySlot2())); // 显示BMainWindow窗口 mB->show(); } AMainWindow::~AMainWindow() { delete ui; } void AMainWindow::AmySlot() { // 显示BMainWindow窗口,隐藏AMainWindow窗口 mB->show(); this->hide(); } void AMainWindow::AmySlot2() { // 显示AMainWindow窗口,隐藏BMainWindow窗口 this->show(); mB->hide(); } void AMainWindow::on_pushButton_clicked() { // 发射信号ASignal() emit ASignal(); }
- 在BMainWindow类的头文件(bmainwindow.h)中,声明信号
BSignal()
和槽函数on_pushButton_clicked()
。// bmainwindow.h #ifndef BMAINWINDOW_H #define BMAINWINDOW_H #include <QMainWindow> namespace Ui { class BMainWindow; } class BMainWindow : public QMainWindow { Q_OBJECT public: explicit BMainWindow(QWidget *parent = 0); ~BMainWindow(); signals: void BSignal(); private slots: void on_pushButton_clicked(); private: Ui::BMainWindow *ui; }; #endif // BMAINWINDOW_H
- 在BMainWindow类的源文件(bmainwindow.cpp)中实现构造函数、析构函数和槽函数。
// bmainwindow.cpp #include "bmainwindow.h" #include "ui_bmainwindow.h" BMainWindow::BMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::BMainWindow) { ui->setupUi(this); } BMainWindow::~BMainWindow() { delete ui; } void BMainWindow::on_pushButton_clicked() { // 发射信号BSignal() emit BSignal(); }
- 在主函数(main.cpp)中创建AMainWindow实例并运行应用程序。
#include "amainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); AMainWindow w; w.show(); return a.exec(); }
完成上述步骤后,您将创建一个使用Qt框架的多窗口应用程序。在该应用程序中,AMainWindow和BMainWindow是两个独立的窗口,它们可以相互切换显示。当在AMainWindow窗口点击按钮时,将发射信号ASignal(),然后在AMainWindow类中的槽函数AmySlot()中可以实现显示BMainWindow窗口、隐藏AMainWindow窗口的逻辑。同样,当在BMainWindow窗口点击按钮时,将发射信号BSignal(),然后在AMainWindow类中的槽函数AmySlot2()中可以实现显示AMainWindow窗口、隐藏BMainWindow窗口的逻辑。