栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qt的对话框与窗口--多窗口

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt的对话框与窗口--多窗口

多窗口

就是在一个窗口界面上有多几个窗口。

    程序的主窗口类是QWMainWindow,从QMainWindow继承。主窗口有一个工具栏,4个创建窗体的按钮以不同方式创建和使用窗体。主窗体工作区绘制一个背景图片,有一个tabWidget组件,作为创建窗体的父窗体。没有子窗体时,tabWidget不显示。

代码如下:

QWMainWindow::QWMainWindow(QWidget *parent) :   QMainWindow(parent),
   ui(new Ui::QWMainWindow)
{
   ui->setupUi(this);
   ui->tabWidget->setVisible(false);
   ui->tabWidget->clear();//清除所有页面
   ui->tabWidget->setTabsClosable(); //Page有关闭按钮,可被关闭
   this->setCentralWidget(ui->tabWidget);
   this->setWindowState(Qt::WindowMaximized); //窗口最大化显示
}
void QWMainWindow::paintEvent(QPaintEvent *event)
{ //绘制窗口背景图片
   Q_UNUSED(event);
   QPainter painter(this);
   painter.drawPixmap(0,ui->mainToolBar->height(),this->width(),
      this->height()-ui->mainToolBar->height()-ui->statusBar->height(),
      QPixmap(":/images/images/back.jpg")); 
}

主要实现的功能是,利用tabWidget来显示嵌入式的QWidget窗口和QMainWindown窗口。还有独立窗口显示QWidget窗口和QMainWindown窗口。

设置显示的方式

主窗口工具栏上的“嵌入式Widget”按钮的响应代码如下:

void QWMainWindow::on_actWidgetInsite_triggered()
{ //创建QFormDoc窗体,并在tabWidget中显示
   QFormDoc *formDoc = new QFormDoc(this); 
   formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除
   int cur=ui->tabWidget->addTab(formDoc,
         QString::asprintf("Doc %d",ui->tabWidget->count()));
   ui->tabWidget->setCurrentIndex(cur);
   ui->tabWidget->setVisible(true);
}

这段代码动态创建一个QFormDoc类对象formDoc,并设置其为关闭时删除。然后使用QTabWidget的addTab()函数,为主窗口上的tabWidget新建一个页面,作为formDoc的父窗体组件,formDoc就在新建的页面里显示,我们称这种窗体显示方式为“嵌入式”。

主窗口工具栏上的“独立Widget窗口”按钮响应代码如下:

void QWMainWindow::on_actWidget_triggered()
{
   QFormDoc *formDoc = new QFormDoc();
   formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除
   formDoc->setWindowTitle("基于QWidget的窗体,无父窗口,关闭时删除");
   formDoc->setWindowFlag(Qt::Window,true);
//   formDoc->setWindowFlag(Qt::CustomizeWindowHint,true);
//   formDoc->setWindowFlag(Qt::WindowMinMaxButtonsHint,false);
//   formDoc->setWindowFlag(Qt::WindowCloseButtonHint,true);
//   formDoc->setWindowFlag(Qt::WindowStaysOnTopHint,true);
   formDoc->setWindowOpacity(0.9);
//   formDoc->setWindowModality(Qt::WindowModal);
   formDoc->show(); //在单独的窗口中显示
}

主窗口工具栏上的“嵌入式MainWindow”按钮的响应代码如下:

void QWMainWindow::on_actWindowInsite_triggered()
{
   QFormTable *formTable = new QFormTable(this);
   formTable->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除
   int cur=ui->tabWidget->addTab(formTable,
           QString::asprintf("Table %d",ui->tabWidget->count()));
   ui->tabWidget->setCurrentIndex(cur);
   ui->tabWidget->setVisible(true);
}

主窗口工具栏上的“独立MainWindow窗口”按钮响应代码如下:

void QWMainWindow::on_actWindow_triggered()
{
   QFormTable*  formTable = new QFormTable(this);
   formTable->setAttribute(Qt::WA_DeleteOnClose); 
   formTable->setWindowTitle("基于QMainWindow的窗口,指定父窗口,关闭时删除");
   formTable->show();
}

说明:
程序参考于《Qt 5.9 C++开发指南》
程序中增加注释,方便理解和学习。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号