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

萍乡网站推广/网络推广方式主要有

萍乡网站推广,网络推广方式主要有,保山网站建设服务,网站服务器数据迁移文章目录 1. 主要的窗体类及其用途2. 窗体类重要特性的设置2.1 setAttribute()函数2.2 setWindowFlags()函数2.3 setWindowState()函数2.4 setWindowModality()函数2.5 setWindowOpacity()函数 3. 多窗口应用程序设计3.1 主窗口设计3.2 QFormDoc类的设计3.3 QFormDoc类的使用3.…

文章目录

  • 1. 主要的窗体类及其用途
  • 2. 窗体类重要特性的设置
    • 2.1 setAttribute()函数
    • 2.2 setWindowFlags()函数
    • 2.3 setWindowState()函数
    • 2.4 setWindowModality()函数
    • 2.5 setWindowOpacity()函数
  • 3. 多窗口应用程序设计
    • 3.1 主窗口设计
    • 3.2 QFormDoc类的设计
    • 3.3 QFormDoc类的使用
    • 3.4 QFormTable类的设计
    • 3.5 QFormTable类的使用
    • 3.6 QTabWidget类的控制
  • 4. 框架及源码
    • 4.1 框架
      • 4.1.1 qformdoc.ui
      • 4.1.2 qformtable.ui
      • 4.1.3 qwdialogheaders.ui
      • 4.1.4 qwdialogsize.ui
      • 4.1.5 qwmainwindow.ui
    • 4.2 源码
      • 4.2.1 qformdoc.cpp
      • 4.2.2 qformtable.cpp
      • 4.2.3 qwdialogheaders.cpp
      • 4.2.4 qwdialogsize.cpp
      • 4.2.5 qwmainwindow.cpp

1. 主要的窗体类及其用途

常用的窗体基类是QWidget、QDialog 和QMainWindow,在创建 GUI应用程序时选择窗体基类就是从这 3 个类中选择。QWidget 直接继承于 QObject,是 QDialog 和 QMainWindow 的父类,其他继承于 QWidget 的窗体类还有 QSplashScreen、QMdiSubWindow和QDesktopWidget。另外还有一个类QWindow,它同时从 QObject 和QSurface 继承。这些类的继承关系如图6-9 所示。

这些窗体类的主要特点和用途如下。

  • QWidget: 在没有指定父容器时可作为独立的窗口,指定父容器后可以作为容器的内部组件

  • QDialog:用于设计对话框,以独立窗口显示。

  • QMainWindow:用于设计带有菜单栏、工具栏、状态栏的主窗口,一般以独立窗口显示

  • QSplashScreen:用作应用程序启动时的 splash 窗口,没有边框。

  • QMdiSubWindow:用于为 QMdiArea 提供一个子窗体,用于 MDI(多文档)应用程序的设计。

  • QDesktopWidget: 具有多个显卡和多个显示器的系统具有多个桌面,这个类提供用户桌面信息,如屏幕个数、每个屏幕的大小等。

  • QWindow: 通过底层的窗口系统表示一个窗口的类,一般作为一个父容器的嵌入式窗体不作为独立窗体。

2. 窗体类重要特性的设置

窗体显示或运行的一些特性可以通过 QWidget 的一些函数设置,如 6.2 节介绍对话框的创建和使用时,有如下的代码:

dlgLocate = new QWDialogLocate(this);
dlgLocate->setAttribute(Qt::WA_DeleteOnClose);
Qt::WindowFlags flags=dlgLocate->windowFlags();
dlgqLocate->getWindowFlags(flags | Qt::WindowStaysOnTopHint);

这段代码就用到了两个设置函数:setAttribute()和 setWindowFlags(),它们可以设置窗体的显示特性和运行特性。下面介绍 QWidget 类中用于窗体属性设置的几个主要函数的功能。

2.1 setAttribute()函数

setAttribute()函数用于设置窗体的一些属性,其函数原型为:

void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)

枚举类型 Qt::WidgetAttribute 定义了窗体的一些属性,可以打开或关闭这些属性。枚举类型Qt::WidgetAttribute 常用的常量及其意义见表 6-2。

在这里插入图片描述

2.2 setWindowFlags()函数

setWindowFlags()函数用于设置窗体标记,其函数原型是:

void QWidget::setWindowFlags(Qt::WindowFlags type)

参数type 是枚举类型Qt::WindowType 的值的组合,用于同时设置多个标记。

另外一个函数 setWindowFlag()用于一次设置一个标记,其函数原型为:

void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)

可单独打开或关闭某个属性。枚举类型 Qt::WindowType 常用的常量值见表 6-3

在这里插入图片描述
在这里插入图片描述

Qt::Widget、Qt::Window 等表示窗体类型的常量可以使窗体具有缺省的外观设置,如果设置为 Qt::Dialog 类型,则窗体具有对话框的缺省外观,例如标题栏没有最小化、最大化按钮。

控制窗体显示效果和外观的设置项可定制窗体的外观,例如设置一个窗体只有最小化最大化按钮,没有关闭按钮。

2.3 setWindowState()函数

setWindowState()函数使窗口处于最小化、最大化等状态,其函数原型为:

void QWidget::setWindowState(Qt::WindowStates windowState)

枚举类型Qt::WindowState 表示了窗体的状态,其取值见表 6-4。

在这里插入图片描述

2.4 setWindowModality()函数

setWindowModality()函数用于设置窗口的模态,只对窗口类型有用。其函数原型为:

void setWindowModality(Qt::WindowModality windowModality)

枚举类型Qt::WindowModality 的取值意义见表 6-5

在这里插入图片描述

2.5 setWindowOpacity()函数

setWindowOpacity()函数用于设置窗口的透明度,其函数原型为:
void QWidget::setWindowOpacity(qreal level)

参数 level 是 1.0(完全不透明) 至 0.0(完全透明)之间的数。窗口透明度缺省值是 1.0,即完全不透明。

3. 多窗口应用程序设计

3.1 主窗口设计

本节以实例samp6_3演示多窗口应用程序的设计,实例主窗口如下图所示:

在这里插入图片描述

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

QWMainWindow::QWMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::QWMainWindow)
{ui->setupUi(this);ui->tabWidget->setVisible(false);ui->tabWidget->clear();//清除所有页面ui->tabWidget->tabsClosable(); //Page有关闭按钮,可被关闭this->setCentralWidget(ui->tabWidget);
//    this->setWindowState(Qt::WindowFullScreen); //窗口最大化显示this->setWindowState(Qt::WindowMaximized); //窗口最大化显示
//    this->setWindowState(Qt::WindowMinimized); //窗口最大化显示this->setAutoFillBackground(true);//    this->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除//    Qt::WindowFlags    flags=this->windowFlags();
//    this->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小
}

在构造函数中,将 tabWidget 组件设置为不可见,并且页面可关闭,这样每个页面标题部分都会出现一个关闭按钮,单击可以关闭页面。
背景图片绘制使用窗体的 paintEvent(])事件,获取主窗口的画笔之后,将资源文件里的一个图片绘制在主窗口的工作区。绘图的内容在第 8 章详细介绍。
实例除了主窗口之外,还有两个窗口和两个对话框。
QFormDoc:是继承于QWidget 可视化设计的窗体,主窗口工具栏上的“嵌入式 Widget和“独立Widget 窗口”按钮将以两种方式使用QFormDoc 类。
QFormTable:是继承于QMainWindow 可视化设计的窗体,其界面功能与实例 samp6_2的主窗口类似,主窗口工具栏上的“嵌入式 MainWindow”和“独立MainWindow 窗口”按钮将以两种方式使用QFormTable类。
QWDialogSize和QWDialogHeaders 就是实例 samp6_2 中设计的对话框类,由 QFormTable调用进行表格组件设置。

3.2 QFormDoc类的设计

在Qt Creator 单击“File”->“New File or Project”菜单项,在出现的对话框里选择创建QtDesigner Form Class,并且在向导中选择基类为 QWidget,将创建的新类命名为 QFormDoc。

在QFormDoc 的窗口上只放置一个 QPlainTextEdit 组件。由于 QFormDoc 是从QWidget 继承而来的,在 UI设计器里不能直接为 QFormDoc 设计工具栏,但是可以创建 Action,然后在窗体创建时用代码创建工具栏。图6-11 是设计的 Action 除了 actOpen 和 actFont 之外,其他编辑操作的Action 都和QPlainTextEdit 相关槽函数关联,actClose 与窗口的 close()槽函数关联。

在这里插入图片描述

actOpen 用于打开文件,actFont 用于设置文档字体,这些功能在前面的例子里都遇到过,不是本实例的重点,不再介绍其实现代码。

在QFormDoc 的构造函数里用代码创建工具栏和布局,也可以在析构函数里增加一个消息显示的对话框,以便观察窗体是何时被删除的。代码如下:

QFormDoc::QFormDoc(QWidget *parent) :QWidget(parent),ui(new Ui::QFormDoc)
{ui->setupUi(this);//使用UI设计的Actions设计工具栏QToolBar* locToolBar = new QToolBar(tr("文档"),this); //创建工具栏locToolBar->addAction(ui->actOpen);locToolBar->addAction(ui->actFont);locToolBar->addSeparator();locToolBar->addAction(ui->actCut);locToolBar->addAction(ui->actCopy);locToolBar->addAction(ui->actPaste);locToolBar->addAction(ui->actUndo);locToolBar->addAction(ui->actRedo);locToolBar->addSeparator();locToolBar->addAction(ui->actClose);locToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
//    locToolBar->setAutoFillBackground(true);QVBoxLayout *Layout = new QVBoxLayout();Layout->addWidget(locToolBar); //设置工具栏和编辑器上下布局Layout->addWidget(ui->plainTextEdit);Layout->setContentsMargins(2,2,2,2); //减小边框的宽度Layout->setSpacing(2);this->setLayout(Layout); //设置布局
//    this->setAutoFillBackground(true); //避免工具栏显示背景图片
}QFormDoc::~QFormDoc()
{
//    QMessageBox::information(this, "消息", "QFormDoc对象被删除和释放");delete ui;
}

3.3 QFormDoc类的使用

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

void QWMainWindow::on_actWidgetInsite_triggered()
{ //创建QFormDoc窗体,并在tabWidget中显示QFormDoc *formDoc = new QFormDoc(this); //不指定父窗口,单独用show()方法显示formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除//    formDoc->setWindowFlag(Qt::Widget,true);
//    formDoc->setWindowFlag(Qt::CustomizeWindowHint,true);
//    formDoc->setWindowFlag(Qt::WindowMinMaxButtonsHint,false);//    formDoc->setWindowState(Qt::WindowMaximized);
//    formDoc->setWindowOpacity(0.5);
//    formDoc->setWindowModality(Qt::WindowModal);//    formDoc->show(); //在单独的窗口中显示
//    formDoc->setWindowTitle("基于QWidget的窗口,无父窗口,关闭时删除");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(); //不指定父窗口,用show()显示formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除formDoc->setWindowTitle("基于QWidget的窗体,无父窗口,关闭时删除");formDoc->setWindowFlag(Qt::Window,true);//    formDoc->setWindowFlag(Qt::CustomizeWindowHint,true);
//    formDoc->setWindowFlag(Qt::WindowMinMaxButtonsHint,true);
//    formDoc->setWindowFlag(Qt::WindowCloseButtonHint,true);
//    formDoc->setWindowFlag(Qt::WindowStaysOnTopHint,true);//    formDoc->setWindowState(Qt::WindowMaximized);formDoc->setWindowOpacity(0.9);
//    formDoc->setWindowModality(Qt::WindowModal);formDoc->show(); //在单独的窗口中显示
}

这里在创建 formDoc 对象时,并没有指定父窗口,创建窗口的代码是:

QFormDoc *formDoc = new QFormDoc(); //不指定父窗口,用show()显示

使用 setWindowFlag()函数,设置其为 Qt::Window 类型,并用 show()函数显示窗口。这样创建的是一个单独显示的窗口,并且在 windows 的任务栏上会有显示。若有文档窗口打开,则关闭主窗口,而文档窗口依然存在,实际上这时候主窗口是隐藏了。若关闭所有文档窗口,主窗口自动删除并释放,才完全关闭应用程序。
如果创建 formDoc 时指定主窗口为父窗口,即:

QFormDoc *formDoc = new QFormDoc();

则formDoc 不会在 windows 的任务栏上显示,关闭主窗口时,所有文档窗口自动删除。

图6-12 是嵌入式和独立的 QFormDoc 窗体的显示效果,在创建独立的显示窗口时,还可以尝试使用 setWindowFlag()函数设置不同的属性,观察这些属性的控制效果。

在这里插入图片描述

3.4 QFormTable类的设计

表格窗口类 QFormTable 是基于 QMainWindow 的可视窗口类,其功能与实例 samp6_2主窗口类似,使用 QStandardItemModel 模型和 QTableView 组件构成 Model/View 结构的表格数据编辑器,并且可以调用 QWDialogSize 和 QWDialogHeaders 对话框进行表格大小设置和表头设置。该窗口的具体设计不详细介绍了,只是为了观察窗口删除的时机,在析构函数里增加一个信息显示对话框。

QFormTable::~QFormTable()
{
//    QMessageBox::information(this, "消息", "FormTable窗口被删除和释放");delete ui;
}

3.5 QFormTable类的使用

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

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

代码功能是创建一个 QFormTable 对象 formTable,并在主窗口的 tabWidget 组件里新增一个页面,将 formTable 显示在新增页面里。所以,即使是从QMainWindow 继承的窗口类,也是可以在其他界面组件里嵌入式显示的。
主窗口工具栏上的“独立MainWindow 窗口”按钮响应代码如下:

void QWMainWindow::on_actWindow_triggered()
{QFormTable* formTable = new QFormTable(this);
//    formChart = new QFormTable(); //无父窗体,在windows任务栏上有显示formTable->setAttribute(Qt::WA_DeleteOnClose); //对话框关闭时自动删除对话框对象,用于不需要读取返回值的对话框formTable->setWindowTitle("基于QMainWindow的窗口,指定父窗口,关闭时删除");
//    formChart->setWindowTitle("多实例窗口,指定父窗口");formTable->show();
}

这样创建的 formTable 以独立窗口显示,关闭时自动删除。它指定了主窗口为父窗口,主窗
口关闭时,所有 QFormTable 类窗口自动删除。

无论是嵌入式的,还是独立的 QFormTable 窗口,都可以调用QWDialogSize 和QWDialogHeaders对话框进行表格大小和表头文字设置,对话框的调用方法在 6.2 节已有介绍。创建 QFormTable 嵌入式窗体和独立窗口的运行效果如图 6-13 所示。

在这里插入图片描述

3.6 QTabWidget类的控制

现在,单击 tabWidget 中嵌入的QFormDoc 或QFormTable 窗体工具栏上的“关闭”按钮,都可以关闭窗体并且删除分页。但是单击分页上的关闭图标,并不能关闭窗口。而且,关闭所有分页后,tabWidget 并没有隐藏,无法显示背景图片。

为此,需要对 tabWidget 的两个信号编写槽函数,tabCloseRequested()和 currentChanged()信号的槽函数代码如下:

void QWMainWindow::on_tabWidget_tabCloseRequested(int index)
{//关闭Tabif (index<0)return;QWidget* aForm=ui->tabWidget->widget(index);aForm->close();
}
void QWMainWindow::on_tabWidget_currentChanged(int index)
{Q_UNUSED(index);bool  en=ui->tabWidget->count()>0; //再无页面时,actions禁用ui->tabWidget->setVisible(en);
}

tabCloseRequested()信号在单击分页的关闭图标时发射,传递来的参数 index 表示页面的编号。QTabWidget::widget()返回 TabWidget 组件中某个页面的窗体组件。获取页面的 QWidget 组件后,调用 close()函数关闭窗体。
删除一个分页或切换页面时,会发射 currentChanged()信号,在此信号的槽函数里判断分页个数是否为零,以控制 tabWidget 是否可见。

4. 框架及源码

4.1 框架

4.1.1 qformdoc.ui

在这里插入图片描述

4.1.2 qformtable.ui

在这里插入图片描述

4.1.3 qwdialogheaders.ui

在这里插入图片描述

4.1.4 qwdialogsize.ui

在这里插入图片描述

4.1.5 qwmainwindow.ui

在这里插入图片描述

4.2 源码

4.2.1 qformdoc.cpp

#include "qformdoc.h"
#include "ui_qformdoc.h"#include    <QToolBar>
#include    <QVBoxLayout>
#include    <QFileDialog>
#include    <QFile>
#include    <QTextStream>
#include    <QFontDialog>
#include    <QFileInfo>
#include    <QMessageBox>#include    <qwmainwindow.h>QFormDoc::QFormDoc(QWidget *parent) :QWidget(parent),ui(new Ui::QFormDoc)
{ui->setupUi(this);//使用UI设计的Actions设计工具栏QToolBar* locToolBar = new QToolBar(tr("文档"),this); //创建工具栏locToolBar->addAction(ui->actOpen);locToolBar->addAction(ui->actFont);locToolBar->addSeparator();locToolBar->addAction(ui->actCut);locToolBar->addAction(ui->actCopy);locToolBar->addAction(ui->actPaste);locToolBar->addAction(ui->actUndo);locToolBar->addAction(ui->actRedo);locToolBar->addSeparator();locToolBar->addAction(ui->actClose);locToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
//    locToolBar->setAutoFillBackground(true);QVBoxLayout *Layout = new QVBoxLayout();Layout->addWidget(locToolBar); //设置工具栏和编辑器上下布局Layout->addWidget(ui->plainTextEdit);Layout->setContentsMargins(2,2,2,2); //减小边框的宽度Layout->setSpacing(2);this->setLayout(Layout); //设置布局
//    this->setAutoFillBackground(true); //避免工具栏显示背景图片
}QFormDoc::~QFormDoc()
{
//    QMessageBox::information(this, "消息", "QFormDoc对象被删除和释放");delete ui;
}void QFormDoc::loadFromFile(QString &aFileName)
{QString str;QFile aFile(aFileName);  //以文件方式读出if (aFile.open(QIODevice::ReadOnly | QIODevice::Text)) //以只读文本方式打开文件{QTextStream aStream(&aFile); //用文本流读取文件ui->plainTextEdit->clear();//清空while (!aStream.atEnd()){str=aStream.readLine();//读取文件的一行ui->plainTextEdit->appendPlainText(str); //添加到文本框显示}aFile.close();//关闭文件mCurrentFile=aFileName;QFileInfo   fileInfo(aFileName);QString shorName=fileInfo.fileName();this->setWindowTitle(shorName);}
}void QFormDoc::on_actOpen_triggered()
{
//    curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径QString curPath=QDir::currentPath();
//调用打开文件对话框打开一个文件QString aFileName=QFileDialog::getOpenFileName(this,tr("打开一个文件"),curPath,"C程序文件文件(*.h *cpp);;文本文件(*.txt);;所有文件(*.*)");if (aFileName.isEmpty())return; //如果未选择文件,退出loadFromFile(aFileName);
}void QFormDoc::on_actFont_triggered()
{QFont   font;font=ui->plainTextEdit->font();bool    ok;font=QFontDialog::getFont(&ok,font);ui->plainTextEdit->setFont(font);}

4.2.2 qformtable.cpp

#include "qformtable.h"
#include "ui_qformtable.h"#include    <QMessageBox>QFormTable::QFormTable(QWidget *parent) :QMainWindow(parent),ui(new Ui::QFormTable)
{ui->setupUi(this);theModel = new QStandardItemModel(12,6,this); //数据模型theSelection = new QItemSelectionModel(theModel);//Item选择模型//为tableView设置数据模型ui->tableView->setModel(theModel); //设置数据模型ui->tableView->setSelectionModel(theSelection);//设置选择模型//    QMessageBox::information(this, "消息", "表格窗口被创建");
}QFormTable::~QFormTable()
{
//    QMessageBox::information(this, "消息", "FormTable窗口被删除和释放");delete ui;
}void QFormTable::on_actSize_triggered()
{QWDialogSize    *dlgTableSize=new QWDialogSize(this); //创建对话框Qt::WindowFlags    flags=dlgTableSize->windowFlags();dlgTableSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小dlgTableSize->setRowColumn(theModel->rowCount(),theModel->columnCount()); //对话框数据初始化int ret=dlgTableSize->exec();// 以模态方式显示对话框,用户关闭对话框时返回 DialogCode值if (ret==QDialog::Accepted) //OK键被按下,对话框关闭,若设置了setAttribute(Qt::WA_DeleteOnClose),对话框被释放,无法获得返回值{ //OK键被按下,获取对话框上的输入,设置行数和列数int cols=dlgTableSize->columnCount();theModel->setColumnCount(cols);int rows=dlgTableSize->rowCount();theModel->setRowCount(rows);}delete dlgTableSize; //删除对话框
}void QFormTable::on_actSetHeader_triggered()
{if (dlgSetHeaders==NULL) //如果对象没有被创建过,就创建对象dlgSetHeaders = new QWDialogHeaders(this);if (dlgSetHeaders->headerList().count()!=theModel->columnCount()){QStringList strList;for (int i=0;i<theModel->columnCount();i++)//获取现有的表头标题strList.append(theModel->headerData(i,Qt::Horizontal,Qt::DisplayRole).toString());dlgSetHeaders->setHeaderList(strList);//用于对话框初始化显示}int ret=dlgSetHeaders->exec();// 以模态方式显示对话框if (ret==QDialog::Accepted) //OK键被按下{QStringList strList=dlgSetHeaders->headerList();//获取对话框上修改后的StringListtheModel->setHorizontalHeaderLabels(strList);// 设置模型的表头标题}
}

4.2.3 qwdialogheaders.cpp

#include "qwdialogheaders.h"
#include "ui_qwdialogheaders.h"#include    <QMessageBox>QWDialogHeaders::QWDialogHeaders(QWidget *parent) :QDialog(parent),ui(new Ui::QWDialogHeaders)
{ui->setupUi(this);model= new QStringListModel;ui->listView->setModel(model);
}QWDialogHeaders::~QWDialogHeaders()
{
//    QMessageBox::information(this, "消息", "DialogHeaders对话框被删除和释放");delete ui;
}void QWDialogHeaders::setHeaderList(QStringList &headers)
{model->setStringList(headers);
}QStringList QWDialogHeaders::headerList()
{return  model->stringList();
}

4.2.4 qwdialogsize.cpp

#include "qwdialogsize.h"
#include "ui_qwdialogsize.h"#include    <QMessageBox>QWDialogSize::QWDialogSize(QWidget *parent) :QDialog(parent),ui(new Ui::QWDialogSize)
{ui->setupUi(this);
}QWDialogSize::~QWDialogSize()
{
//    QMessageBox::information(this,"提示","DialogSize对话框被删除");delete ui;
}int QWDialogSize::rowCount()
{ //用于主窗口调用获得行数的输入值return  ui->spinBoxRow->value();
}int QWDialogSize::columnCount()
{//用于主窗口调用获得列数的输入值return  ui->spinBoxColumn->value();
}void QWDialogSize::setRowColumn(int row, int column)
{ //初始化数据显示ui->spinBoxRow->setValue(row);ui->spinBoxColumn->setValue(column);
}

4.2.5 qwmainwindow.cpp

#include "qwmainwindow.h"
#include "ui_qwmainwindow.h"#include    <QPainter>
#include    <QFileDialog>
#include    "qwmisc.h"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/back2.jpg"));
}QWMainWindow::QWMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::QWMainWindow)
{ui->setupUi(this);ui->tabWidget->setVisible(false);ui->tabWidget->clear();//清除所有页面ui->tabWidget->tabsClosable(); //Page有关闭按钮,可被关闭this->setCentralWidget(ui->tabWidget);
//    this->setWindowState(Qt::WindowFullScreen); //窗口最大化显示this->setWindowState(Qt::WindowMaximized); //窗口最大化显示
//    this->setWindowState(Qt::WindowMinimized); //窗口最大化显示this->setAutoFillBackground(true);//    this->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除//    Qt::WindowFlags    flags=this->windowFlags();
//    this->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小
}QWMainWindow::~QWMainWindow()
{delete ui;
}void QWMainWindow::on_tabWidget_tabCloseRequested(int index)
{//关闭Tabif (index<0)return;QWidget* aForm=ui->tabWidget->widget(index);aForm->close();
}void QWMainWindow::on_actWidgetInsite_triggered()
{ //创建QFormDoc窗体,并在tabWidget中显示QFormDoc *formDoc = new QFormDoc(this); //不指定父窗口,单独用show()方法显示formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除//    formDoc->setWindowFlag(Qt::Widget,true);
//    formDoc->setWindowFlag(Qt::CustomizeWindowHint,true);
//    formDoc->setWindowFlag(Qt::WindowMinMaxButtonsHint,false);//    formDoc->setWindowState(Qt::WindowMaximized);
//    formDoc->setWindowOpacity(0.5);
//    formDoc->setWindowModality(Qt::WindowModal);//    formDoc->show(); //在单独的窗口中显示
//    formDoc->setWindowTitle("基于QWidget的窗口,无父窗口,关闭时删除");int cur=ui->tabWidget->addTab(formDoc,QString::asprintf("Doc %d",ui->tabWidget->count()));ui->tabWidget->setCurrentIndex(cur);ui->tabWidget->setVisible(true);
}void QWMainWindow::on_actWindowInsite_triggered()
{QFormTable *formTable = new QFormTable(this);formTable->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除//    aTable->setWindowTitle("基于QWidget的窗口,无父窗口,关闭时删除");int cur=ui->tabWidget->addTab(formTable,QString::asprintf("Table %d",ui->tabWidget->count()));ui->tabWidget->setCurrentIndex(cur);ui->tabWidget->setVisible(true);
}void QWMainWindow::on_actWindow_triggered()
{QFormTable* formTable = new QFormTable(this);
//    formChart = new QFormTable(); //无父窗体,在windows任务栏上有显示formTable->setAttribute(Qt::WA_DeleteOnClose); //对话框关闭时自动删除对话框对象,用于不需要读取返回值的对话框formTable->setWindowTitle("基于QMainWindow的窗口,指定父窗口,关闭时删除");
//    formChart->setWindowTitle("多实例窗口,指定父窗口");formTable->show();
}void QWMainWindow::on_actWidget_triggered()
{QFormDoc *formDoc = new QFormDoc(); //不指定父窗口,用show()显示formDoc->setAttribute(Qt::WA_DeleteOnClose); //关闭时自动删除formDoc->setWindowTitle("基于QWidget的窗体,无父窗口,关闭时删除");formDoc->setWindowFlag(Qt::Window,true);//    formDoc->setWindowFlag(Qt::CustomizeWindowHint,true);
//    formDoc->setWindowFlag(Qt::WindowMinMaxButtonsHint,true);
//    formDoc->setWindowFlag(Qt::WindowCloseButtonHint,true);
//    formDoc->setWindowFlag(Qt::WindowStaysOnTopHint,true);//    formDoc->setWindowState(Qt::WindowMaximized);formDoc->setWindowOpacity(0.9);
//    formDoc->setWindowModality(Qt::WindowModal);formDoc->show(); //在单独的窗口中显示
}void QWMainWindow::on_tabWidget_currentChanged(int index)
{Q_UNUSED(index);bool  en=ui->tabWidget->count()>0; //再无页面时,actions禁用ui->tabWidget->setVisible(en);
}

相关文章:

06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

文章目录 1. 主要的窗体类及其用途2. 窗体类重要特性的设置2.1 setAttribute()函数2.2 setWindowFlags()函数2.3 setWindowState()函数2.4 setWindowModality()函数2.5 setWindowOpacity()函数 3. 多窗口应用程序设计3.1 主窗口设计3.2 QFormDoc类的设计3.3 QFormDoc类的使用3.…...

(力扣)用两个栈实现队列

这里是栈的源代码&#xff1a;栈和队列的实现 当然&#xff0c;自己也可以写一个栈来用&#xff0c;对题目来说不影响&#xff0c;只要符合栈的特点就行。 题目&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、pe…...

【自动化测试框架】关于unitttest你需要知道的事

一、UnitTest单元测试框架提供了那些功能 1.提供用例组织和执行 如何定义一条“测试用例”? 如何灵活地控制这些“测试用例”的执行? 2.提供丰定的断言方法 当测试用例的执行结果与预期结果不一致时&#xff0c;判定测试用例失败。在自动化测试中&#xff0c;通过“断言”…...

手机便签中可以打勾的圆圈或小方块怎么弄?

在日常的生活和工作中&#xff0c;很多网友除了使用手机便签来记录灵感想法、读书笔记、各种琐事、工作事项外&#xff0c;还会用它来记录一些清单&#xff0c;例如待办事项清单、读书清单、购物清单、旅行必备物品清单等。 在按照记录的清单内容来执行的时候&#xff0c;为了…...

【Linux】gdb 的使用

目录 1. 使用 gdb 的前置工作 2. 如何使用 gdb 进行调试 1、如何看到我的代码 2、如何打断点 3、怎么运行程序 4、如何进行逐过程调试 5、如何进行逐语句调试 6、如何监视变量值 7、如何跳到指定位置 8、运行完一个函数 9、怎么跳到下一个断点 10、如何禁用/开启…...

C++11之右值引用

C11之右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的 右值引用&#xff08;rvalue reference&#xff09;语法特性&#xff0c;所以从现在开始我们之前学习的引用就叫做左值引用&#xff08;lvalue reference&#xff09;。无论左值引用还是右值引用&#…...

【PHP的设计模式】

PHP的设计模式 一、策略模式二、工厂模式三、单例模式四、注册模式五、适配器模式六、观察者模式 一、策略模式 策略模式是对象的行为模式&#xff0c;用意是对一组算法的封装。动态的选择需要的算法并使用。 策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强…...

React 之 Redux - 状态管理

一、前言 1. 纯函数 函数式编程中有一个非常重要的概念叫纯函数&#xff0c;JavaScript符合函数式编程的范式&#xff0c;所以也有纯函数的概念 确定的输入&#xff0c;一定会产生确定的输出 函数在执行过程中&#xff0c;不能产生副作用 2. 副作用 表示在执行一个函数时&a…...

集合转数组

首先&#xff0c;我们在看到集合转数组的时候可能第一个想到的就是toArray(),但是我们在调用 toArray()的时候&#xff0c;可能会遇到异常 java.lang.ClassCastException&#xff1b;这是因为 toArray()方法返回的类型是 Obejct[]&#xff0c;如果我们将其转换成其他类型&#…...

使用Python将Word文档转换为PDF的方法

摘要&#xff1a; 文介绍了如何使用Python编程语言将Word文档转换为PDF格式的方法。我们将使用python-docx和pywin32库来实现这个功能&#xff0c;这些库提供了与Microsoft Word应用程序的交互能力。 正文&#xff1a; 在现实生活和工作中&#xff0c;我们可能会遇到将Word文…...

Java 判断一个字符串在另一个字符串中出现的次数

1.split实现 package com.jiayou.peis.official.account.biz.utils;public class Test {public static void main(String[] args) {String k"0110110100100010101111100101011001101110111111000101101001100010101" "011101100101011010100011111010111001001…...

设计模式十三:代理(Proxy Pattern)

代理模式是一种结构型设计模式&#xff0c;它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介&#xff0c;并提供了额外的功能&#xff0c;如远程访问、延迟加载、访问控制等。 代理模式的使用场景包括&a…...

Redis基础 (三十八)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 NoSQL 1.2 Redis 二、安装 2.1 安装方式 &#xff1a; 三、目录结构 3.1 rpm -ql redis 3.2 /etc/redis.conf 主配置文件 3.3 /var/lib/redis …...

maven中的scope

1、compile&#xff1a;默认值&#xff0c;可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中&#xff0c;打包时也要包含进去。 2、test&#xff1a;该依赖仅仅参与测试相关的工作&#xff0c;包括测试代码的编译和执行&#xff0c;不会被打包&#xff0c;…...

【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…...

CNN(四):ResNet与DenseNet结合--DPN

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 前面实现了ResNet和DenseNet的算法&#xff0c;了解了它们有各自的特点&#xff1a; ResNet&#xff1a;通过建立前面层与后面层之间的“短路…...

汽车EBSE测试流程分析(四):反思证据及当前问题解决

EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章&#xff0c;在之前的“篇章&#xff08;三&#xff09;”中已经结合具体研究实践阐述了“步骤二&#xff0c;通过系统调研确定改进方案”等内容。那么&#xff0c;在本篇章&#xff08;四&#xff09;中&#…...

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器

文章目录 前言一、认识注解&#xff1a;RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 &#x1f31f;✨机制&#xff0c;用于处理应用程序中发生的异常&#xff…...

2023/08/05【网络课程总结】

1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…...

log_softmax比softmax更好?

多类别分类的一个trick 探讨一下在多类别分类场景&#xff0c;如翻译、生成、目标检测等场景下&#xff0c;使用log_softmax的效果优于softmax的原因。 假设词典大小为10&#xff0c;一个词的ID为9&#xff08;即词典的最后一个词&#xff09;&#xff0c;使用交叉熵作为损失函…...

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)

1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…...

【SOP】最佳实践之 TiDB 业务写变慢分析

作者&#xff1a; 李文杰_Jellybean 原文来源&#xff1a; https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中&#xff0c;每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循&#xff0c;…...

带有参数的 PL/SQL 过程/函数从选择查询返回表

技术标签: 【中文标题】带有参数的 PL/SQL 过程/函数从选择查询返回表【英文标题】&#xff1a;PL/SQL Procedure/function with params to return a table from(of) a select query【发布时间】&#xff1a;2020-12-01 11:17:49【问题描述】&#xff1a; 如何创建带参数的 (…...

文件的权限

1、修改文件的所属者和所属组 2、修改文件某一类人&#xff08;所属者、所属组、其他人&#xff09;的权限 一、用户对于普通文件的权限 二、用户对于目录文件的权限 三、访问控制列表ACL 四、特殊权限&#xff08;了解&#xff09; wuneng创建了几个文件&#xff0c;xiaoming对…...

vue3集成echarts最佳实践

安装 echarts npm install echarts --save 两种引用方式 非虚拟 dom import * as echarts from echarts;var chartDom document.getElementById(mychart); var myChart echarts.init(chartDom); var option;option {title: {text: Referer of a Website,subtext: Fake Da…...

一位年薪40W的测试被开除,回怼的一番话,令人沉思

一位年薪40W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…...

网络适配器和MAC地址

点对点信道&#xff1a;由于目的地只有一个选项&#xff0c;所以数据链路层不需要使用地址。 而在广播信道中&#xff1a; 各个主机如何判断信号是不是发给自己的&#xff1f; 当多个主机连接在同一个广播信道上&#xff0c;要想实现两个主机之间的通信&#xff0c;则每个主机都…...

react-player静音不能自动播放问题

现象 移动端不能自动播放 原因 取决于您使用的浏览器&#xff0c;但muted如果您不想与autoplay用户交互&#xff0c;则必须使用视频。 Chrome 的自动播放策略很简单&#xff1a; 始终允许静音自动播放。在以下情况下允许自动播放声音&#xff1a; 用户与域进行了交互&#x…...

培训Java技术要多久才能学会?答案都在这里啦

培训Java技术要多久才能学会?这是想学习Java开发的很多人都会问到的一个问题。而这个问题的答案其实并不是那么简单&#xff0c;因为学Java的时间长短受到众多因素的影响。本文将从个人基础、学习动力和学习效率三个方面来为您解答这个问题。 1. 个人基础 自己的基础对于学习…...

Java中使用HttpPost发送form格式的请求

在Java中使用HttpPost发送form格式的请求&#xff0c;可以使用Apache HttpClient库来实现。以下是一个示例代码&#xff1a; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client…...