四、实现子窗体的按钮功能。

1、在显示时间的子窗体中,有两个默认的按钮,都还没有定义其功能,下面就来定义,无论单击哪个按钮,都将线束时钟显示的线程并关闭窗体。

2、在子窗体的可视化设计界面中,在窗体的按钮上点右键,选择“转到槽...”,如下图所示。

python qt6 子窗体 qt建立子窗口_Qt

3、在弹出的对话框中选择“clicked(QAbstractButton*)”一项,如下图所示,单击“OK”按钮。

python qt6 子窗体 qt建立子窗口_ico_02

4、在开发环境会直接跳转到timedialog.cpp文件中,并已经填充好了on_buttonBox_clicked(QAbstractButton *button)函数的框架,在其中输入如下图所示的代码,并保存。

python qt6 子窗体 qt建立子窗口_控件_03

5、重复上面的步骤创建一个on_buttonBox_rejected()函数的框架(注意在上面的第3步中选择“rejected()”一项),然后在其中输入如下图所示的代码,并保存。

python qt6 子窗体 qt建立子窗口_ico_04

6、为了确保在直接关闭窗体时也结束线程,还得在关闭窗体的事件中执行线程终止的程序,要实现这一功能,需要在子窗体程序中添加关闭事件的函数,先在头文件timedialog.h中进行相关文件的包含及函数的声明,如下图所示。

python qt6 子窗体 qt建立子窗口_Qt_05

 7、 然后再打开timedialog.cpp文件,在其中加入一个关闭事件函数的相关代码,如下图所示。

python qt6 子窗体 qt建立子窗口_控件_06

8、上述程序中,无论单击“确定”、“取消”按钮或是直接关闭窗体,都将结束时间线程。这样做是为了确保在子窗体关闭时结束线程,否则会造成窗体虽然关闭了,但线程仍没结束,当再次打开子窗体时,又会新增一个线程,这样将导致系统资源的过度消耗。

五、实现主窗体的关闭通知功能。

1、有时在关闭窗体时,需要提示用户,让用户确认一下是否真要关闭程序,这就需要在窗体的关闭事件中使用消息框进行操作。

2、同前面关闭子窗体的事件一下,要在主窗体中新建关闭事件函数,先在头文件mainwindow.h中进行声明,如下图所示。

python qt6 子窗体 qt建立子窗口_ico_07

3、然后在主窗体程序文件mainwindow.cpp中,加入下面的代码。

void MainWindow::closeEvent(QCloseEvent *event)
{
    switch (QMessageBox::information(this,QString::fromUtf8("确认"),QString::fromUtf8("确认要退出吗?"),QString::fromUtf8("确定"),QString::fromUtf8("取消"),0,1))
    {
        case 0:
            event->accept();  //点击了确认按钮
            break;
        case 1:
            event->ignore();  //点击了取消按钮
            break;
        default:
            break;
    }
}

4、完成后的样子如下图所示。

python qt6 子窗体 qt建立子窗口_ico_08

5、保存后运行程序,在关闭主窗体时就会弹出确认对话框,如下图所示。

python qt6 子窗体 qt建立子窗口_python qt6 子窗体_09

六、 实现控件随窗体尺寸变化的功能。

1、在主窗体上放置一个textEdit控件,并把大小设置铺满当前窗体,如下图所示。

python qt6 子窗体 qt建立子窗口_控件_10

2、运行程序,并拉动主窗体边沿改变其大小,会发现里面的textEdit控件并未随着改变,如下图所示。

python qt6 子窗体 qt建立子窗口_ico_11

3、在Qt中,可通过整体布局来实现控件跟随窗体变化,但这里主要讨论程序方式,这样更为通用和灵活一些。先在头文件mainwindow.h中添加尺寸改变函数的声明,如下图所示。

python qt6 子窗体 qt建立子窗口_Qt_12

4、然后在主窗体文件mainwindow.cpp中,加入下面的代码,如下图所示。

python qt6 子窗体 qt建立子窗口_python qt6 子窗体_13

5、保存并运行程序,这时再拖动主窗体大小,会发现里面的textEdit控件也随之改变了。

七、实现窗体的自定义图标功能。

1、首先要准备一个自己的图标文件,这里使用一个QQ的小企鹅图标作为演示,把企鹅图标文件命名为myicon. ico并把它拷贝到工程所在的目录下。

2、单击“文件”->“新建文件或项目”,在弹出的对话框左边的“文件和类”下面选择“Qt”一项,然后在中间选择“Qt Resource File”,如下图所示,单击“Choose...”按钮。

python qt6 子窗体 qt建立子窗口_控件_14

3、在弹出的对话框中,给资源起个名称,这里输入“icon”,如下图所示,点击“下一步”。

python qt6 子窗体 qt建立子窗口_python qt6 子窗体_15

4、接下来询问是否把新建的资源加入到项目中,这里默认加入,如下图所示,点击“完成”按钮。

python qt6 子窗体 qt建立子窗口_Qt_16

5、完成后在左边可看见新加入的icon.qrc文件图标,在其上点右键,选择“Add Prefix...”

python qt6 子窗体 qt建立子窗口_控件_17

6、在弹出的对话框中,在第一行输入根目录“/”,如下图所示,然后点击“OK”按钮。

python qt6 子窗体 qt建立子窗口_控件_18

7、在弹出的对话框中选择“Yes to All”按钮,重载所有更新。然后再次在icon.qrc上点右键,选择“添加现有文件...”,然后选择刚才拷贝好的图标文件“myicon.ico” ,再次点击“Yes to All”按钮,完成后如下图所示。

python qt6 子窗体 qt建立子窗口_控件_19

8、在资源准备好了之后,就可以在窗体中引用该图标文件了。双击“mainwindow.ui”打开主窗体设计界面,在右边的属性中找到“windowicon”一项,并点击下拉箭头选择“选择资源...”,如下图所示。

python qt6 子窗体 qt建立子窗口_Qt_20

9、在弹出的对话框中,双击左边的<resource root>,然后在右边选择企鹅图标,如下图所示,点击“OK”按钮。

python qt6 子窗体 qt建立子窗口_Qt_21

10、保存好运行程序,可看见主窗体的图标已变成了企鹅,如下图所示。可用同样的方法为子窗体设置图标。

python qt6 子窗体 qt建立子窗口_Qt_22

八、实现程序脱离开发环境运行。

1、以上程序是在Qt Creator中运行的,当程序开发完成后,需要脱离开发环境运行,下面讨论如何在Windows系统下运行。

2、先把程序由Debug方式更改为Release方式,在Qt Creator中那个用于运行的绿色三角形按钮上方,找到一个电脑图标并单击它,然后在它弹出的选项中选择“Release”,如下图所示。

python qt6 子窗体 qt建立子窗口_Qt_23

3、等待它转变完成后,单击最下方的锤子图标进行构建(也可再次运行程序),完成后可在构建目录下发现多出一个Release目录,进入该目录就可看到可执行程序了(本例为untitled1.exe),至于构建目录在什么地方,这是在开发配置环境时确定的,单击左边的“项目”图标就可以看到,在本例中如下图所示。

python qt6 子窗体 qt建立子窗口_ico_24

python qt6 子窗体 qt建立子窗口_ico_25

4、单独一个可执行程序untitled1还不能运行,需要把Qt4相关的支持文件也要附带上,共有5个文件,分别是:QtCore4.dll、QtGui4.dll、libstdc++-6.dll、libgcc_s_dw2-1.dll和libwinpthread-1.dll。这5个动态链接库文件可在“Qt4.8.7/bin”目录中找到,把它们与刚才Release生成的可执行程序untitled1放在同一个目录下,untitled1就可以独立运行了。