一.应用场景
多窗口,顾名思义,有多个窗口可以供我们举行操作!
截个小图,你应该就知道了
OK,话不多说,直接开干,先来筹划我们的主窗口
必要蔬菜的可以dd我…
运行结果:
运行结果有点拉,我们来把tabWidget设置为中心组件.
- #include "mainwindow.h"
- #include "ui_mainwindow.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;
- }
复制代码 运行结果:
但是刚刚我们添加的关闭按钮不能真正的举行关闭,当点击X的时候,会发出一个信号
可以去tabWidget里面去找!
现在我们可以去添加一个槽函数,来实现真正的关闭功能
- private slots:
- //按照转到槽的格式 on_发送者_信号 的格式来写会自动的关联,不用我们手动的关联
- void on_tabWidget_tabCloseRequested(int index);
复制代码 槽函数的实现:
- void MainWindow::on_tabWidget_tabCloseRequested(int index)
- {
- QWidget* widget=ui->tabWidget->widget(index);//拿到widget
- widget->close();//进行关闭
- }
复制代码 当我们背面举行添加了窗口,再来测试这个关闭功能.
二.嵌入的窗口
1.筹划Widget窗口
然后添加好action
因为这是widget不是mainwindow全部不能添加工具栏,但是我们可以通过代理来举行添加,代码是万能的!
- #include "formwidget.h"
- #include "ui_formwidget.h"
- #include <QToolBar>//工具栏
- #include <QVBoxLayout>//水平布局
- FormWidget::FormWidget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::FormWidget)
- {
- ui->setupUi(this);
- QToolBar *Bar=new QToolBar(this);
- Bar->addAction(ui->actionOpen);
- Bar->addSeparator();//添加分割线
- Bar->addAction(ui->actionFont);
- Bar->addAction(ui->actionCut);
- Bar->addAction(ui->actionCopy);
- Bar->addAction(ui->actionPaste);
- Bar->addAction(ui->actionRepeal);
- Bar->addAction(ui->actionRewire);
- Bar->addSeparator();
- Bar->addAction(ui->actionEXIT);
- Bar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//字体显示在下
- //设置布局
- QVBoxLayout *vLayout=new QVBoxLayout(this);
- vLayout->addWidget(Bar);
- vLayout->addWidget(ui->plainTextEdit);
- this->setLayout(vLayout);//为窗口添加布局
- }
- FormWidget::~FormWidget()
- {
- delete ui;
- }
复制代码 2.创建窗口
注意添加头文件
- FormWidget *form=new FormWidget(this);
- form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
复制代码 3.添加窗口
- //为tabWidget添加页面
- int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));
- ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
复制代码 4.总代码
- #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)
- {
- QWidget* widget=ui->tabWidget->widget(index);//拿到widget
- widget->close();//进行关闭
- }
- void MainWindow::on_action_Widget_triggered(){ FormWidget *form=new FormWidget(this);
- form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
- //为tabWidget添加页面
- int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));
- ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
- }
复制代码 运行结果;
里面详细的功能不做实现,我们主要是演示多窗口的用法!
三.独立的窗口
1.创建窗口
- FormWidget *form=new FormWidget(this);
- form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
复制代码 2.表现窗口
- void MainWindow::on_action_WidgetIndent_triggered(){ FormWidget *form=new FormWidget(this);
- form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
- form->show();//以非模态的方式表现}
复制代码 运行结果:
这样会出现问题,所以我们要对widget窗口设置标志,使其有对话框的摸样.
- void MainWindow::on_action_WidgetIndent_triggered(){ FormWidget *form=new FormWidget(this);
- form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
- form->setWindowFlag(Qt::Window,true); form->setWindowTitle("基于widget的独立窗口"); form->show();//以非模态的方式表现}
复制代码 运行结果:
四.总结
多窗口实在是比较简单的,主要是筹划好,表现的方式确定好,就可以了!
小彩蛋:
有没有点熊猫烧香的感觉,这就是多窗口
没什么好的句子,哈哈
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |