首页 > 其他分享 >Qt - 在父窗口中创建子窗口需要注意的事项

Qt - 在父窗口中创建子窗口需要注意的事项

时间:2024-10-11 11:04:07浏览次数:1  
标签:窗口 Qt parent 创建 ui QWidget Ui include

Qt 在父窗口中创建子窗口需要注意的事项:

 

一、QWidget

1、《在QWidget下创建同类型的子窗口》

指定了父对象:w = new WidgetSon(this) 窗口就不是独立的,会嵌入到父窗口里。窗口一起显示。而且显示子窗口可以不用调用显示窗口函数,不调用的话也可以显示子窗口。

不指定父对象:w = new WidgetSon() 窗口是独立的,不会嵌入到父窗口里,先显示子窗口后显示父窗口。要显示子窗口必须调用显示窗口函数,如果不调用的话就不会显示子窗口。

示例代码:

widget.h

查看代码
 #ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class WidgetSon;

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

     WidgetSon* w;
};
#endif // WIDGET_H

widget.cpp

查看代码
 #include "widget.h"
#include "ui_widget.h"

#include "widgetson.h"

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setStyleSheet("background-color: rgb(150,150,150)");

    w = new WidgetSon();
    w->setStyleSheet("background-color: rgb(30,150,250)");
    w->show();
}

Widget::~Widget()
{
    delete ui;
}

widgetson.h

查看代码
 #ifndef WIDGETSON_H
#define WIDGETSON_H

#include <QWidget>

namespace Ui {
class WidgetSon;
}

class WidgetSon : public QWidget
{
    Q_OBJECT

public:
    explicit WidgetSon(QWidget *parent = nullptr);
    ~WidgetSon();

private:
    Ui::WidgetSon *ui;
};

#endif // WIDGETSON_H

widgetson.cpp

查看代码
 #include "widgetson.h"
#include "ui_widgetson.h"

WidgetSon::WidgetSon(QWidget *parent) :
QWidget(parent),
    ui(new Ui::WidgetSon)
{
    ui->setupUi(this);

    this->setFixedSize(600,500);
    ui->label->setFixedSize(600,500);
}

WidgetSon::~WidgetSon()
{
    delete ui;
}

main.cpp

查看代码
 #include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

运行效果:

 

1.1、《在QWidget下创建QDialog类型的子窗口》
1.2、《在QWidget下创建QMainWindow类型的子窗口》

============================================================================

 

二、QDialog

2、《在QDialog下创建同类型的子窗口》

指定了父对象:d = new DialogSon(this) 窗口是独立的,不会嵌入到父窗口里,先显示父窗口后显示子窗口(不过几乎差不多一起显示的)。而且要显示子窗口必须调用显示窗口函数,如果不调用的话就不会显示子窗口。

不指定父对象:d = new DialogSon() 窗口还是独立的,不会嵌入到父窗口里,先显示子窗口后显示父窗口。也是要显示子窗口必须调用显示窗口函数,如果不调用的话就不会显示子窗口。

示例代码:

dialog.h

查看代码
 #ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class DialogSon;

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    Ui::Dialog *ui;

    DialogSon*  d;
};
#endif // DIALOG_H

dialog.cpp

查看代码
 #include "dialog.h"
#include "ui_dialog.h"

#include "dialogson.h"
#include <QMessageBox>

Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{
    ui->setupUi(this);

    this->setStyleSheet("background-color: rgb(150,150,150)");

    d = new DialogSon();
    d->setStyleSheet("background-color: rgb(30,150,250)");
    // 显示信息对话框
    //QMessageBox::information(this, "提示","子窗口显示", QMessageBox::Ok);
    d->show();
}

Dialog::~Dialog()
{
    delete ui;
}

dialogson.h

查看代码
 #ifndef DIALOGSON_H
#define DIALOGSON_H

#include <QDialog>

namespace Ui {
class DialogSon;
}

class DialogSon : public QDialog
{
    Q_OBJECT

public:
    explicit DialogSon(QWidget *parent = nullptr);
    ~DialogSon();

private:
    Ui::DialogSon *ui;
};

#endif // DIALOGSON_H

dialogson.cpp

查看代码
 #include "dialogson.h"
#include "ui_dialogson.h"

DialogSon::DialogSon(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogSon)
{
    ui->setupUi(this);
}

DialogSon::~DialogSon()
{
    delete ui;
}

main.cpp

查看代码
 #include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

运行效果:

2.1、《在QDialog下创建QWidget类型的子窗口》
2.2、《在QDialog下创建QMainWindow类型的子窗口》

============================================================================

 

三、QMainWindow

3、《在QMainWindow下创建同类型的子窗口》

指定了父对象:m = new MainWindowSon(this) 窗口是独立的,不会嵌入到父窗口里,先显示父窗口后显示子窗口(不过几乎差不多一起显示的)。而且要显示子窗口必须调用显示窗口函数,如果不调用的话就不会显示子窗口。

不指定父对象:m = new MainWindowSon() 窗口还是独立的,不会嵌入到父窗口里,先显示子窗口后显示父窗口。也是要显示子窗口必须调用显示窗口函数,如果不调用的话就不会显示子窗口。

示例代码:

mainwindow.h

查看代码
 #ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindowSon;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    MainWindowSon* m;
};
#endif // MAINWINDOW_H

mainwindow.cpp

查看代码
 #include "mainwindow.h"
#include "ui_mainwindow.h"

#include "mainwindowson.h"

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setStyleSheet("background-color: rgb(150,150,150)");

    m = new MainWindowSon();
    m->setStyleSheet("background-color: rgb(30,150,250)");
    m->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

mainwindowson.h

查看代码
 #ifndef MAINWINDOWSON_H
#define MAINWINDOWSON_H

#include <QMainWindow>

namespace Ui {
class MainWindowSon;
}

class MainWindowSon : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindowSon(QWidget *parent = nullptr);
    ~MainWindowSon();

private:
    Ui::MainWindowSon *ui;
};

#endif // MAINWINDOWSON_H

mainwindowson.cpp

查看代码
 #include "mainwindowson.h"
#include "ui_mainwindowson.h"

MainWindowSon::MainWindowSon(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindowSon)
{
    ui->setupUi(this);
}

MainWindowSon::~MainWindowSon()
{
    delete ui;
}

main.cpp

查看代码
 #include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

3.1、《在QMainWindow下创建QWidget类型的子窗口》
3.2、《在QMainWindow下创建QDialog类型的子窗口》

标签:窗口,Qt,parent,创建,ui,QWidget,Ui,include
From: https://www.cnblogs.com/zhuchunlin/p/18457975

相关文章

  • idea数据库图形化窗口连接数据库报错:Driver class ‘com.mysql.cj.jdbc.Driver‘ not
    报错信息在idea中数据库图形化窗口中,创建下图数据库连接点击测试连接后,发生报错:Driverclass'com.mysql.cj.jdbc.Driver'notfoundNodriverfilesprovided.报错界面:原因出现此错误的原因通常是数据库驱动程序尚未下载或未正确配置到IDEA中。解决方案......
  • 如何用PyQt5创建多个窗口,同时获取多个U盘内的文件的名称,并分别在对应窗口打印文件名,要
    在PyQt5中,你可以使用QThread创建多个线程来并行处理每个U盘的文件名获取任务。每个线程负责扫描一个U盘的文件,同时在主窗口显示结果。以下是一个示例代码,用来创建多个窗口,同时在每个窗口中显示各自的U盘文件名:每个窗口使用QWidget。使用QThread创建后台线程获取U......
  • 【Qt】QStandardItem和QStandardItemModle以及QModelIndex的关系
    在Qt框架中,QStandardItem、QStandardItemModel和QModelIndex是用来处理表格和数据视图的关键类。以下是它们之间的关系和用途:QStandardItemQStandardItem是QStandardItemModel中用来表示单个项的类。它可以包含数据(如文本、图标、复选框状态等)和子项(用于树结构)。QSt......
  • 【教程】0x04 绘制记牌器窗口及插件打包 —— 通过MYScrcpy学python系列
    前言MYScrcpyGithub/Gitee从1.6.4版本开始,MYScrcpy为童鞋们提供了一个开放的插件开发环境(Extensions)。童鞋们可以根据需要自行开发插件。本章主要讲解如何通过面向对象的思想,借助Dearpygui绘制一个记牌器面板,同时如何打包插件进行共享。注意插件用于功能测试及......
  • 代码随想录算法训练营day11|150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K
    学习资料:https://programmercarl.com/0150.逆波兰表达式求值.html#算法公开课栈、队列、堆学习记录:150.逆波兰表达式求值(中序表达式转换为后序表达式,用栈实现;遇到符号就从栈中取前两个元素进行运算,再放回去)点击查看代码fromoperatorimportadd,sub,muldefdiv(x,y):......
  • 使用Qt Creator创建项目
    个人主页:C++忠实粉丝欢迎点赞......
  • Qt 4 下载地址(附安装教程)
    Qt4下载地址(附安装教程)获取Qt4现在去Qt官网下载老版本的Qt,会提示DownloadfromyourIPaddressisnotallowed.如果想要点进去下载,就要挂梯子。然而,在知道地址的情况下,可以不挂梯子,直接把链接丢到迅雷里面就可以下载了。这对Qt4和5都适用:可以根据下载地址的规律......
  • 使用Git创建本地仓库(命令行方式&图形化界面方式)
    1.使用命令行创建本地仓库(1)在空文件夹中点gitbashhere(2)输入gitinit即创建目录2.使用图形界面创建本地仓库(1)一个空文件夹repo1(2)右键→GitGUIHere(3)选择createnewrepository......
  • 【01】DataFrame的创建和属性
    DataFrame是一个表格型的数据结构,可以看成就是excel中的表格。官方文档:https://pandas.pydata.org/docs/reference/frame.htmlDataFrame的创建DataFrame构造方法如下:pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)data:DataFrame的数据部......
  • 【linux开发-Qt】-信号与槽机制
    一、什么是信号与槽机制信号(signal),就是在特定情况下被发射的事件,例如PushButton最常见的信号就是鼠标单击时发射的clicked()信号。槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private或protected),可以具有任......