【qt】多窗口开辟

打印 上一主题 下一主题

主题 597|帖子 597|积分 1791

一.应用场景

多窗口,顾名思义,有多个窗口可以供我们举行操作!
截个小图,你应该就知道了

OK,话不多说,直接开干,先来筹划我们的主窗口

必要蔬菜的可以dd我…
运行结果:

运行结果有点拉,我们来把tabWidget设置为中心组件.
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent)
  4.     : QMainWindow(parent)
  5.     , ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8.     ui->tabWidget->clear();//清空页
  9.     setCentralWidget(ui->tabWidget);
  10.     setWindowState(Qt::WindowMaximized);//一运行就是最大化
  11.     ui->tabWidget->setTabsClosable(true);//对tab添加一个关闭按钮
  12. }
  13. MainWindow::~MainWindow()
  14. {
  15.     delete ui;
  16. }
复制代码
运行结果:

但是刚刚我们添加的关闭按钮不能真正的举行关闭,当点击X的时候,会发出一个信号
可以去tabWidget里面去找!

现在我们可以去添加一个槽函数,来实现真正的关闭功能
  1. private slots:
  2.     //按照转到槽的格式 on_发送者_信号 的格式来写会自动的关联,不用我们手动的关联
  3.     void on_tabWidget_tabCloseRequested(int index);
复制代码
槽函数的实现:
  1. void MainWindow::on_tabWidget_tabCloseRequested(int index)
  2. {
  3.     QWidget* widget=ui->tabWidget->widget(index);//拿到widget
  4.     widget->close();//进行关闭
  5. }
复制代码
当我们背面举行添加了窗口,再来测试这个关闭功能.
二.嵌入的窗口

1.筹划Widget窗口


然后添加好action

因为这是widget不是mainwindow全部不能添加工具栏,但是我们可以通过代理来举行添加,代码是万能的!
  1. #include "formwidget.h"
  2. #include "ui_formwidget.h"
  3. #include <QToolBar>//工具栏
  4. #include <QVBoxLayout>//水平布局
  5. FormWidget::FormWidget(QWidget *parent) :
  6.     QWidget(parent),
  7.     ui(new Ui::FormWidget)
  8. {
  9.     ui->setupUi(this);
  10.     QToolBar *Bar=new QToolBar(this);
  11.     Bar->addAction(ui->actionOpen);
  12.     Bar->addSeparator();//添加分割线
  13.     Bar->addAction(ui->actionFont);
  14.     Bar->addAction(ui->actionCut);
  15.     Bar->addAction(ui->actionCopy);
  16.     Bar->addAction(ui->actionPaste);
  17.     Bar->addAction(ui->actionRepeal);
  18.     Bar->addAction(ui->actionRewire);
  19.     Bar->addSeparator();
  20.     Bar->addAction(ui->actionEXIT);
  21.     Bar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//字体显示在下
  22.     //设置布局
  23.     QVBoxLayout *vLayout=new QVBoxLayout(this);
  24.     vLayout->addWidget(Bar);
  25.     vLayout->addWidget(ui->plainTextEdit);
  26.     this->setLayout(vLayout);//为窗口添加布局
  27. }
  28. FormWidget::~FormWidget()
  29. {
  30.     delete ui;
  31. }
复制代码
2.创建窗口

注意添加头文件
  1.     FormWidget *form=new FormWidget(this);
  2.     form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
复制代码
3.添加窗口

  1. //为tabWidget添加页面
  2.     int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));
  3.     ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
复制代码
4.总代码

  1. #include "mainwindow.h"#include "ui_mainwindow.h"#include "formwidget.h"MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);    ui->tabWidget->clear();    setCentralWidget(ui->tabWidget);    setWindowState(Qt::WindowMaximized);//一运行就是最大化    ui->tabWidget->setTabsClosable(true);//对tab添加一个关闭按钮}MainWindow::~MainWindow(){    delete ui;}void MainWindow::on_tabWidget_tabCloseRequested(int index)
  2. {
  3.     QWidget* widget=ui->tabWidget->widget(index);//拿到widget
  4.     widget->close();//进行关闭
  5. }
  6. void MainWindow::on_action_Widget_triggered(){    FormWidget *form=new FormWidget(this);
  7.     form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
  8.     //为tabWidget添加页面
  9.     int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));
  10.     ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
  11. }
复制代码
运行结果;

里面详细的功能不做实现,我们主要是演示多窗口的用法!
三.独立的窗口

1.创建窗口

  1. FormWidget *form=new FormWidget(this);
  2.     form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
复制代码
2.表现窗口

  1. void MainWindow::on_action_WidgetIndent_triggered(){    FormWidget *form=new FormWidget(this);
  2.     form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
  3.         form->show();//以非模态的方式表现}
复制代码
运行结果:

这样会出现问题,所以我们要对widget窗口设置标志,使其有对话框的摸样.
  1. void MainWindow::on_action_WidgetIndent_triggered(){    FormWidget *form=new FormWidget(this);
  2.     form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
  3.     form->setWindowFlag(Qt::Window,true);    form->setWindowTitle("基于widget的独立窗口");    form->show();//以非模态的方式表现}
复制代码
运行结果:

四.总结

多窗口实在是比较简单的,主要是筹划好,表现的方式确定好,就可以了!
小彩蛋:

有没有点熊猫烧香的感觉,这就是多窗口

   没什么好的句子,哈哈

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表