做现货黄金的金融网站,安徽省建设工程协会网站,动漫网站做毕业设计简单吗,成都广告公司工资一般多少文章目录 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.ui4.1.2 qformtable.ui4.1.3 qwdialogheaders.ui4.1.4 qwdialogsize.ui4.1.5 qwmainwindow.ui 4.2 源码4.2.1 qformdoc.cpp4.2.2 qformtable.cpp4.2.3 qwdialogheaders.cpp4.2.4 qwdialogsize.cpp4.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 flagsdlgLocate-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 flagsthis-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 curui-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 curui-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 (index0)return;QWidget* aFormui-tabWidget-widget(index);aForm-close();
}
void QWMainWindow::on_tabWidget_currentChanged(int index)
{Q_UNUSED(index);bool enui-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.hQFormDoc::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()){straStream.readLine();//读取文件的一行ui-plainTextEdit-appendPlainText(str); //添加到文本框显示}aFile.close();//关闭文件mCurrentFileaFileName;QFileInfo fileInfo(aFileName);QString shorNamefileInfo.fileName();this-setWindowTitle(shorName);}
}void QFormDoc::on_actOpen_triggered()
{
// curPathQCoreApplication::applicationDirPath(); //获取应用程序的路径QString curPathQDir::currentPath();
//调用打开文件对话框打开一个文件QString aFileNameQFileDialog::getOpenFileName(this,tr(打开一个文件),curPath,C程序文件文件(*.h *cpp);;文本文件(*.txt);;所有文件(*.*));if (aFileName.isEmpty())return; //如果未选择文件退出loadFromFile(aFileName);
}void QFormDoc::on_actFont_triggered()
{QFont font;fontui-plainTextEdit-font();bool ok;fontQFontDialog::getFont(ok,font);ui-plainTextEdit-setFont(font);}4.2.2 qformtable.cpp
#include qformtable.h
#include ui_qformtable.h#include QMessageBoxQFormTable::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 *dlgTableSizenew QWDialogSize(this); //创建对话框Qt::WindowFlags flagsdlgTableSize-windowFlags();dlgTableSize-setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小dlgTableSize-setRowColumn(theModel-rowCount(),theModel-columnCount()); //对话框数据初始化int retdlgTableSize-exec();// 以模态方式显示对话框用户关闭对话框时返回 DialogCode值if (retQDialog::Accepted) //OK键被按下,对话框关闭若设置了setAttribute(Qt::WA_DeleteOnClose)对话框被释放无法获得返回值{ //OK键被按下获取对话框上的输入设置行数和列数int colsdlgTableSize-columnCount();theModel-setColumnCount(cols);int rowsdlgTableSize-rowCount();theModel-setRowCount(rows);}delete dlgTableSize; //删除对话框
}void QFormTable::on_actSetHeader_triggered()
{if (dlgSetHeadersNULL) //如果对象没有被创建过就创建对象dlgSetHeaders new QWDialogHeaders(this);if (dlgSetHeaders-headerList().count()!theModel-columnCount()){QStringList strList;for (int i0;itheModel-columnCount();i)//获取现有的表头标题strList.append(theModel-headerData(i,Qt::Horizontal,Qt::DisplayRole).toString());dlgSetHeaders-setHeaderList(strList);//用于对话框初始化显示}int retdlgSetHeaders-exec();// 以模态方式显示对话框if (retQDialog::Accepted) //OK键被按下{QStringList strListdlgSetHeaders-headerList();//获取对话框上修改后的StringListtheModel-setHorizontalHeaderLabels(strList);// 设置模型的表头标题}
}
4.2.3 qwdialogheaders.cpp
#include qwdialogheaders.h
#include ui_qwdialogheaders.h#include QMessageBoxQWDialogHeaders::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 QMessageBoxQWDialogSize::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.hvoid 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 flagsthis-windowFlags();
// this-setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小
}QWMainWindow::~QWMainWindow()
{delete ui;
}void QWMainWindow::on_tabWidget_tabCloseRequested(int index)
{//关闭Tabif (index0)return;QWidget* aFormui-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 curui-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 curui-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 enui-tabWidget-count()0; //再无页面时actions禁用ui-tabWidget-setVisible(en);
}