当前位置: 首页>前端>正文

qt5 2个barseries 之间有间隔 qt两个窗口

如何新建一个窗口

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_子窗口,第1张

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_子窗口_02,第2张

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_子窗口_03,第3张

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_自定义_04,第4张

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_子窗口_05,第5张

为了区分主窗口和子窗口,我们把主窗口的标题改为"老大",子窗口的标题改为"小弟"。

在"mainwidget.cpp"中,

setWindowTitle("老大");//与 this->setWindowTitle("老大"); 的写法等价

在"subwidget.cpp"中,

this->setWindowTitle("小弟");

在子窗口新建一个按键b
首先在"subwidget.h"中声明一下

private:
    QPushButton b;

然后在"subwidget.cpp"中

b.setParent(this);//指定当前窗口为父对象
b.setText("切换到主窗口");

在主窗口再新建一个按键b3
首先在"mainwidget.h"中声明一下

QPushButton b3;

然后在"mainwidget.cpp"中

b3.setParent(this);//指定当前窗口为父对象
b3.setText("切换到子窗口");
b3.move(50,50);

因为子窗口也是一种控件,要想让子窗口显示出来,也需要定义一个子窗口对象。
首先在"mainwidget.h"中声明一下

SubWidget subw;

mainwidget和subwidget这两个窗口是独立的。
所以不需要指定主窗口为子窗口的父对象。
然后让子窗口显示
在"mainwidget.cpp"中

//显示子窗口
subw.show();

运行一下,会出现两个窗口。

qt5 2个barseries 之间有间隔 qt两个窗口,qt5 2个barseries 之间有间隔 qt两个窗口_自定义_06,第6张

下面,我们来实现功能:

当按下主窗口中的按钮之后,切换到子窗口,同时主窗口隐藏。

当按下子窗口中的按钮之后,切换到主窗口,同时子窗口隐藏。

先不让子窗口显示,

//subw.show();

然后还需要用到connect函数。
由于我们既让它切换到一个窗口,同时让另外一个窗口隐藏,因此需要自定义槽函数。

这里有一个快捷键,使用F4,可在相对应的头文件和源文件之间互相跳转。

主窗口切换到子窗口并隐藏

到"mainwidget.cpp"中

//处理子窗口发送过来的信号。
connect(&subw,&SubWidget::mySignal,this,&MainWidget::changeSubWindow);

需要声明并实现一个槽函数changeWindow()

void MainWidget::changeWindow()
{
    //子窗口显示,主窗口隐藏
    subw.show();
    this->hide();
}

需要注意,定义并使用函数,必须要在相应的.h文件中进行声明
因此,需要在"mainwidget.h"中对changeWindow()进行声明。

void changeWindow();

子窗口切换到主窗口并隐藏

现在出现一个问题:
因为mainwidget.h中有子窗口的对象,所以主窗口可以想让子窗口显示就显示,隐藏就隐藏,而子窗口却不能这么做。那子窗口怎么才能让主窗口的对象显示和隐藏呢?

由子窗口来发送一个信号,父窗口来接收这个信号,然后对这个信号进行处理就可以了。

那么怎样自定义信号和使用信号呢?
到"subwidget.h"中

signals:
    /* 信号必须有signals关键字来声明
     * 信号没有返回值,但可以有参数
     * 信号就是函数的声明,只需声明,无需定义
     * 使用时:emit mySignal();
    */
    void mySignal();

这样以后,信号就定义完成了。
接下来,就让子窗口中的按键按下以后,信号就发送出去
到"subwidget.cpp"中

connect(&b,&QPushButton::clicked,this,&SubWidget::sendSlot);

因此,还需要声明并实现一个槽函数sendSlot(),然后在槽函数中发送信号
到"subwidget.h"中

void sendSlot();

到"subwidget.cpp"中

void SubWidget::sendSlot()
{
     emit mySignal();
}

处理子窗口发送过来的信号。
到"mainwidget.cpp"中

//处理子窗口发送过来的信号。
connect(&subw,&SubWidget::mySignal,this,&MainWidget::changeSubWindow);

因此需要声明并实现一个槽函数changeSubWindow()

void MainWidget::changeSubWindow()
{
    //主窗口显示,子窗口隐藏
    subw.hide();
    this->show();
}

需要注意,定义并使用函数,必须要在相应的.h文件中进行声明
因此,需要在"mainwidget.h"中对changeSubWindow()进行声明。

void changeSubWindow();

注意点
connect函数的第一个参数要传递的是地址

测试程序后还会出现一个问题,就是在切换主窗口和子窗口的时候,主窗口和子窗口的大小会变,怎么解决呢?
分别对这两个窗口指定大小
在"mainwidget.cpp"和"Subwidget.cpp"中

this->resize(400,400);

测试程序,运行正常。



https://www.xamrdz.com/web/2nt1960170.html

相关文章: