QT设计多窗体

窗体类的关系

在布局管理部分,我们已经说过将主界面和两个子系统分别封装成三个不同的类。首先我们讨论每个类中应该封装什么,其次再讨论这三个类之间的具体关系。

通过Qt Dsigner设计好界面后会在工程文件中对应一个.ui的文件;编译器会将该文件转换成能被C++所识别的.h文件。比如configUI.ui文件就对应一个ui_configUI.h文件,该头文件中包含了类Ui::configUI的定义。这个类完全与我们所设计的用户界面等价,也就是说它包含对主界面中各个部件的定义、该界面的布局以及初始化窗体的setupUi()等。

但是应该注意的是,该类仅仅是对我们设计的界面的一种等价转化。我们对该界面的实际操作(比如对各种槽以及信号的定义)并不包含在该类中。为了完成配置系统的具体功能,我们会创建一个新类configUI,并让这个新类继承Ui::configUI。通常在configUI类中会有一个Ui::configUI类的成员变量ui,因此可以通过ui直接获取界面中的各个部件。

注意,由于界面所对应的类configUI被定义在UI这个名字空间中,因此两个同名的类并不会发生名字冲突。这两个类的关系可以通过下面的代码进一步理解:

//将界面对应的configUI类定义在Ui名字空间中;
namespace Ui {
    class configUI;
}

class configUI : public QWidget
{
    Q_OBJECT

public:
    explicit configUI(QWidget *parent = 0);
    ~configUI();
//将 Ui::configUI的对象作为configUI的成员变量;
private:
    Ui::configUI *ui;

private slots:
//在此定义槽函数;
};

在configUI类中,还可以根据需要包含一些成员函数、信号和槽函数等。其他两个界面对应的类也有类似的封装关系,不再赘述。

在布局管理中,通过点击主界面上的按钮就可以切换到相应的窗体。由此引发出我们对这几个窗体类之间关系的思考。具体的做法是,我们可以将两个子系统对应类的对象作为主界面类的成员变量,比如:

namespace Ui {
    class frontPage;
}

class frontPage : public QWidget
{
    Q_OBJECT

public:
    explicit frontPage(QWidget *parent = 0);
    ~frontPage();

private:
    Ui::frontPage *ui;
    configUI *configWidget;
    logUI *logWidget;

signals:
    //在此定义信号;

private slots:
   //在此定义槽函数;
};

那么在切换各个窗体时,就可以方便的通过show()和hide()近来完成。至此,我们已经完成了界面的设计和类的定义,下面要做的就是实现具体窗口的跳转工作。

信号和槽函数的设计

由上文可得知,我们要实现的功能即通过点击每个按钮就可以跳转到相应的窗口。所以三个窗体对应的按钮就对应三个槽函数,触发这几个槽函数的信号即为clicked()。在类frontPage中对上述三个槽函数的声明如下:

signals:
    void goToWidget(int);
private slots:
    void on_logSysBtn_clicked();
    void on_frontPageBtn_clicked();
    void on_configSysBtn_clicked();
    void on_quitBtn_clicked();
    void runningWidget(int);
    void on_quitBtn_clicked();

除了三个窗口按钮对应的槽函数外,还包含其他函数的声明,我们在稍候会解释。按照以往的做法,我们声明了按钮对应的槽函数后,就应该依次去实现这些函数以便实现窗体间的跳转。不过,由于本程序中窗体跳转之间有一定的规律,所以将采用下面的方法:

void frontPage::on_frontPageBtn_clicked()
{
    emit goToWidget(0);
}

void frontPage::on_configSysBtn_clicked()
{
    emit goToWidget(1);
}

void frontPage::on_logSysBtn_clicked()
{
    emit goToWidget(2);
}

也就是说,在每个按钮对应的槽函数中再次发送goToWidget(int)信号,不同按钮将传递不同的整数。在这里我们使用emit关键字显示的发送信号,这和平时我们在Qt Designer中所使用的关联方发不同,但是本质是相同的。由于这个信号是我们自己定义的,并且信号本身就是一个函数,因此需要在frontPage类中对这个信号进行声明,具体可参见上面的示例代码。

我们将此信号和槽函数runningWidget(int)关联。也就是说点击不同窗体对应的按钮都会执行runningWidget(int)槽函数。只不过在该函数内部则会根据所传递的整形参数执行不同的程序段。runningWidget函数的示例代码如下:

void frontPage::runningWidget(int widgetNum)
{
    switch (widgetNum) {
    case 0:
        ui->introTextBrowser->show();
        configWidget->hide();
        logWidget->hide();
        break;
    case 1:
        ui->introTextBrowser->hide();
        configWidget->show();
        logWidget->hide();
        break;
    case 2:
        ui->introTextBrowser->hide();
        configWidget->hide();
        logWidget->show();
        break;
    }
}

从上面的代码中可以看出,通过传递不同的整形参数就可以显示三个窗体中的某一个,并同时隐藏另外两个窗体。通过上面的方法,这样就可以实现多窗体之间的切换了。另外,退出按钮的槽函数的实现基本方法即为直接调用exit函数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt窗体源码框架实例是Qt框架下的一种多窗体应用程序设计方式。它可以在一个应用程序中同时打开多个窗体,通过相互之间的交互,实现各种应用功能。Qt窗体源码框架实例可以应用于各种类型的应用程序开发中,如图形界面开发、游戏开发等。 在Qt框架下使用多窗体源码框架实例,首先需要设计应用程序的主窗体。主窗体包括菜单栏、工具栏、状态栏以及其他需要显示的窗体部件。在主窗体设计完成后,可以开始设计其他窗体,如弹出窗口、对话框等。 在多窗体源码框架实例中,窗体之间的交互主要通过信号和槽函数完成。在窗体之间传递参数时,可以使用信号和槽函数的参数列表进行传递。此外,可以使用Qt的事件机制来实现窗体之间的交互。 在编写多窗体应用程序源码时,需要注意一些细节问题。例如,在创建新的窗体时,需要对新窗体进行初始化操作,如设置窗体大小、标题、样式等属性。此外,还需要在主窗体中管理所有打开的子窗体,确保程序的正常运行。 总之,Qt窗体源码框架实例是一种非常常见的应用程序设计方式,它可以帮助开发人员快速构建功能丰富的应用程序。在实现多窗体应用程序的过程中,需要掌握Qt框架的基本知识,熟悉信号和槽函数的使用方法,以及一些常用的控件和布局方式。 ### 回答2: Qt是一个跨平台的图形用户界面开发工具,可以用它来构建多窗体的应用程序。Qt窗体源码框架实例可以通过以下方法实现。 首先,创建一个Qt应用程序项目,并在项目中添加多个窗体。每个窗体可以使用Qt Designer进行设计。然后,创建一个主窗体,作为应用程序的入口点,并在该窗体中添加菜单栏和工具栏。在菜单栏中添加“文件”菜单,包括“打开”、“保存”和“退出”菜单项。在工具栏中添加相应的工具按钮。 接下来,为菜单栏和工具栏中的每个菜单项和工具按钮添加相应的槽函数。在打开菜单项和工具按钮的槽函数中,打开一个文件对话框,允许用户选择需要打开的文件。在保存菜单项和工具按钮的槽函数中,保存当前窗体中的数据到文件。在退出菜单项和工具按钮的槽函数中,关闭应用程序。可以使用QMessageBox在退出前提示用户是否保存未保存的数据。 在主窗体中添加QTabWidget控件,可以在其中添加多个子窗口。每个子窗口可以是前面设计窗体之一。当用户选择“打开”文件时,可以根据文件类型打开相应的窗体,并将其添加到QTabWidget中。可以使用QFileDialog类来打开文件对话框。 最后,在Qt应用程序中添加任何其他必要的功能或组件,并根据需要重复以上步骤。在Qt中开发多窗体应用程序的框架实例就这样实现了。 ### 回答3: Qt窗体源码框架实例是一种基于Qt框架开发的应用程序,它可以创建多个窗口并在窗口之间进行切换和交互。这种框架通常由以下几个部分组成:主窗口、子窗口、界面设计和事件处理。 主窗口是整个程序的主要界面,它可以包含菜单栏、工具栏、状态栏等元素,也可以包含一个或多个子窗口。子窗口是主窗口的子元素,它们可以包含文本框、按钮、标签等控件,用来展示和操作数据。其中,主窗口和子窗口都需要进行界面设计,在Qt中可以使用Qt Designer来进行界面设计。 为了让主窗口和子窗口之间进行交互,需要进行事件处理。事件处理可以通过信号槽机制来实现。信号槽机制是Qt框架提供的一种事件驱动的编程模式,它可以将信号和槽函数连接起来,当信号触发时,槽函数就会执行相应的操作。这样可以实现主窗口对子窗口的控制和子窗口对主窗口的反馈。 在实际应用中,Qt窗体源码框架可以被用于开发各种应用程序,比如图形界面编辑器、数据管理系统等。通过这种框架,可以实现界面美观、交互丰富、操作简便的应用程序,提高用户的使用体验和工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值