精华内容
下载资源
问答
  • 最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出...

    最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出的通知”这个错误的警告,后来通过try catch语句来捕获到了这个错误,并找到了一些提示信息。

    很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
    System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
    在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
    在 System.Windows.Forms.MessageBox.Show(String text)
    在 DataProvider.Utils.SQLServerHelper.Open() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 33
    在 DataProvider.Utils.SQLServerHelper..ctor(String connectStr) 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 21
    在 DataProvider.Announcement..ctor() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Announcement.cs:行号 21
    在 CreateDataProvider.Announcement()
    在 System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
    在 System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
    在 System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
    在 System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

        看到这些堆栈的调用信息之后,System.Windows.Forms.MessageBox.ShowCore这个是问题的核心,也就是在WCF程序中是不能出现窗体的相关代码,比如MessageBox、OpenFileDialog等相关代码,如果出现这些信息,程序就会经常出现这个错误,应为我们的WCF程序是部署在IIS上面的,IIS是不允许这样处理的。然后再看看我们的代码。

    private void Open()
    {
      try
      {
        sqlConn.Open();//打开数据库
      }
      catch (Exception ex) 
      {
        //MessageBox.Show(ex.Message);
      }
    }

    然后去掉整个程序中出现的MessageBox就可以了。通过这个BUG至少可以得出两点结论:

       1  必须学会使用try catch去捕获未知的错误,然后去查找相关的堆栈信息,然后一步步根据提示来解决问题。

       2  WCF程序中必须不能使用任何和窗体相关的类或者代码。

    对于Web版本也会出现类似的问题(MessageBox。Show());

    展开全文
  • 适用情况2:在模式对话框中选择复杂分类的选项,将选择显示值和编号回传给父窗体。 使用情况3:根据实际情况,更换父窗体的表单变量类型,比如可将一个按钮编程一张图片。   实例1:parent.htm >> ...

    适用于不刷新父窗体的前提下修改父窗体内容

    适用情况1:上传文件后立即更换缩略图的情况

    适用情况2:在模式对话框中选择复杂分类的选项,将选择显示值和编号回传给父窗体。

    使用情况3:根据实际情况,更换父窗体的表单变量类型,比如可将一个按钮编程一张图片。

     

    实例1:parent.htm >> tmp.htm(用iframe包含了child.htm)

    实例2:myStyle.aspx >> seleWebColor.aspx

    展开全文
  • 模式运行时显示模式对话框窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。  在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, ...

    问题:当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。

       System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)

       System.Windows.Forms.MessageBox.Show(String text)

       prjBOI_TRO.Shipping.frmTransin.Gen_QSMC_UPS_SCS_Transin(String strLoadID, Int32 intI)

       prjBOI_TRO.Shipping.frmTransin.btnTransin_Click(Object sender, EventArgs e)

     

    解决:根据Exception的StackTrace信息可以看出,问题出在MessageBox身上,于是将程式里的MessageBox.Show替换掉,问题解决。

    PS:报错的程式是从winform系统中抽取出来的,然后设定了Windows Scheduled Task,而MessageBox没有对应修改掉。

    展开全文
  • 对话框与多窗体设计

    2020-09-15 17:03:37
    本章介绍对话框和多窗体设计,调用方式,数据传递等问题 - Qt提供的标准对话框的式样 - 自定义对话框的设计和调用 - 在一个应用程序中如何设计多种窗体,基于QDialog, QWidget, QMainWindow创建的窗体的调用方式 - ...

    对话框与多窗体设计

    本章介绍对话框和多窗体设计,调用方式,数据传递等问题
    - Qt提供的标准对话框的式样
    - 自定义对话框的设计和调用
    - 在一个应用程序中如何设计多种窗体,基于QDialog, QWidget, QMainWindow创建的窗体的调用方式
    - 创建一个在多页组件中管理的多窗体应用,子窗体与主窗体的交互
    - 创建MDI程序
    - 创建带启动界面和登录界面窗体,保存和读取应用参数
    

    标准对话框

    概述

    对话框					常用静态函数											函数功能
    QFileDialog			QString getOpenFileName(...)		    选择打开一个文件
    								QStringList getOpenFilleNames(...)    选择打开多个文件
    								QString getSaveFileName(...)				选择保存一个文件
    								QString getExistingDirectory(...)			选择一个已有的目录
    								QUrl getOpenFileUrl(...)						选择打开一个文件,可选择远程网络文件
    
    QColorDialog		QColor getColor(...)								选择颜色
    
    QFontDialog			QFont getFont(...)									选择字体
    
    QInputDialog			QString getText(...)								输入单行文字
    								int getInt(...)											输入整数
    								double getDouble(...)							输入浮点数
    								QString getItem(...)								从一个下拉列表框中选择输入
    								QString getMultiLineText(...)				输入多行字符串
    							
    QMessageBox		StandardButton information(...)			信息提示对话框
    								StandardButton question(...)				询问并获取是否确认的对话框
    								StandardButton warning(...)				警告信息提示对话框
    								StandardButton critical(...)					错误信息提示对话框
    								void about(...)										设置自定义信息的关于对话框
    								void aboutQt(...)									关于Qt的对话框
    

    QFileDialog

    选择打开一个文件

    QString
    
    QDir
    QString currentPath()
    
    QFileDialog
    QString getOpenFileName(...)
    参数4,三组
    每组间用两个分号隔开
    同一组内不同后缀间用空格隔开
    返回的是完整文件名[含路径],取消选择时,返回字符串为空.
    

    选择打开多个文件

    QFileDialog
    QStringList getOpenFileNames(...)
    返回一个字符串列表,列表的每一行是选择的一个文件
    

    选择已有目录

    QFileDialog
    QString getExistingDirectory(...)
    参数4为一个选项,一般为QFileDialog::ShowDirsOnly
    返回值是选择的目录名称字符串
    QCoreApplication::applicationDirPath(...)返回应用程序可执行文件所在的目录
    

    选择保存文件名

    QFileDialog
    QString getSaveFileName(...)
    若选择的是一个已经存在的文件,会提示是否覆盖现有的文件,
    如提示覆盖,则返回为选择的文件
    对文件的删除操作需在选择文件后编码实现
    

    QColorDialog

    选择颜色对话框
    QColorDialog
    QColor getColor(...)
    
    QPalette
    QColor color(...)
    void setColor(...)
    
    QPlainTextEdit
    QPalette palette()
    void setPalette(...)
    
    QColor
    bool isValid()
    

    QFontDialog

    QPlainTextEdit
    QFont font()
    void setFont(...)
    
    QFontDialog
    QFont getFont(...)
    

    QInputDialog

    输入文件

    QInputDialog
    QString getText(...)
    参数4为QLineEdit::EchoMode
    

    输入整数

    QInputDialog
    int getInt(...)
    参数7为整数调节单位
    
    QPlainTextEdit
    QFont font()
    void setFont(...)
    
    QFont
    int pointSize()
    void setPointSize(...)
    

    输入浮点数

    QInputDialog
    float getDouble(...)
    参数7为小数点位数
    
    QString
    QString asprintf(...)
    

    下拉列表选择输入

    QStringList
    QStringList& operator<<(...)
    QInputDialog
    QString getItem(...)
    参数6表示显示行是否可编辑
    
    QPlainTextEdit
    void appendPlainText(...)
    

    QMessageBox

    简单信息提示

    QMessageBox
    StandardButton warning(...)
    参数4来设置对话框提供的按钮
    参数5设置缺省选择的按钮
    StandardButton是各种按钮的定义,如
    QMessageBox::OK, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel等
    
    void information(...)
    void warning(...)
    void critical(...)
    void about(...)
    

    确认选择对话框

    QMessageBox
    StandardButton question(...)
    
    StandardButtons(Yes | No | ...)
    

    自定义对话框及其调用

    对话框的不同调用方式

    自定义对话框的设计一般从QDialog继承
    且可采用UI设计器可视化地设计对话框
    
    对话框的调用一般包括创建对话框,传递数据给对话框,显示对话框获取输入,判断对话框单击按钮的返回类型,获取对话框输入数据等
    主窗口采用
    QTabView和QStandardItemModel,QItemSelectionModel
    - 设置表格行列数对话框
    模态对话框
    - 设置标题标题对话框
    以模态方式显示,关闭后只隐藏,不删除
    - 单元格定位与文字设置对话框
    非模态对话框
    可与主窗口交互
    

    对话框QWDialogSize的创建和使用

    创建对话框QWDialogSize

    File-->New File or Project-->Qt Designer From Class创建可视化设计的对话框类
    窗口模板为Dialog without Buttons
    设置自定义对话框的类名
    
    QWDialogSize对话框的界面设计在UI设计器进行
    

    对话框的调用和返回值

    设计QWDialogSize对话框界面时,上面放置放置QPushButton按钮
    将按钮clicked()信号与槽关联[对话框的槽有accept()/reject()]
    对话框的accept(),会关闭对话框,返回QDialog::Accepted作为exec()函数的返回值[默认下,对话框只隐藏,不删除]
    对话框的reject(),会关闭对话框,返回QDialog::Rejected作为exec()函数的返回值
    
    主窗口的设置行数列数工具栏按钮的响应代码,
    用于创建,显示对话框,
    读取对话框上设置的行数,列数
    QDialog
    Qt::WindowFlags windowFlags()
    // Qt::MSWindowsFixedSizeDialogHint
    void setWindowFlags(...)
    
    new QDialog(...)
    // 以模态显示的方式显示对话框
    // 用户只能在对话框上操作,主程序在此等待exec函数的返回结果
    int exec();
    
    用new分配的对话框对象,使用完毕,需用delete删除对话框对象,释放内存
    

    对话框QWDialogHeaders的创建和使用

    对话框的生存期

    指它从创建到删除的存续区间
    

    QWDialogHeaders的定义和实现

    QWDialogHeaders对话框的使用

    QStringList
    int count()
    void append(...)
    
    QStandardItemModel
    int columnCount()
    QVariant headerData(...)
    void setHorizontalHeaderLabels(...)
    
    QVariant
    QString toString()
    
    QDialog
    new QDialog(...)
    // 以模态方式显示对话框窗口
    int exec()
    

    对话框QWDialogLocate的创建与使用

    非模态对话框

    QDialog::exec()用模态方式显示对话框,模态显示的对话框不允许鼠标再去单击其他窗口,直到对话框退出
    使用QDialog::show(),能以非模态方式显示对话框
    对话框类QWDialogLocate有如下功能
    - 主窗口每次调用此对话框时,创建此对话框对象,以StayOnTop方式显示,对话框关闭时,自动删除
    - 在对话框中可操作主窗口
    - 在主窗口操作时,对话框相应更新以反映操作
    - 主窗口上某按钮用于调用对话框,调用后,按钮禁用,对话框关闭时,按钮使能
    

    对话框的创建与调用

    QDialog
    // Qt::WA_DeleteOnClose 窗口关闭时,自动删除对话框对象
    void setAttribute(...)
    Qt::WindowFlags windowFlags()
    void setWindowFlags(...)
    // 以非模态方式显示对话框
    void show()
    
    QItemSelectionModel
    QModelIndex currentIndex()
    
    QModelIndex
    bool isValid()
    

    对话框中操作主窗口

    QDialog
    QWidget* parentWidget()
    
    QStandardItemModel
    QModelIndex index(...)
    void setData(...)
    
    QItemSelectionModel
    void clearSelection()
    void setCurrentIndex(...)
    

    主窗口中操作对话框

    窗口的CloseEvent事件

    对话框关闭时,将主窗口的actTab_Locate重新设置为使能
    将主窗口的指向对话框的指针dlgLocate重新设为NULL
    
    事件是由窗口系统产生了由某些操作触发的特殊函数:如鼠标操作,键盘操作,窗口显示,关闭,绘制,...
    从QWidget继承的窗口部件常用的事件函数有
    - closeEvent() 窗口关闭时触发
    - showEvent() 窗口显示时触发
    - paintEvent() 窗口绘制时触发
    - mouseMoveEvent() 鼠标移动
    - mousePressEvent() 鼠标按下
    - mouseReleaseEvent() 鼠标释放
    - keyPressEvent() 键盘按键按下
    - keyReleaseEvent() 键盘按键释放
    直接在需要对事件处理时,重载类的事件函数即可
    

    利用信号-槽实现交互操作

    前面设计QWDialogLocate对话框与主窗口间的交互采用互相引用的方式
    另外一种实现方式是利用Qt的信号与槽机制,设计相应的信号和槽,将信号与槽关联起来,在进行某个操作时发射信号,槽函数自动响应
    QStandardItemModel
    QModelIndex index(...)
    void setData(...)
    
    QItemSelectionModel
    void clearSelection()
    void setCurrentIndex(...)
    
    发射信号:
    在类定义头文件
    signals:
    	信号函数声明
    在发射信号处
    emit 信号函数调用;
    
    定义信号:
    在类定义头文件
    权限修饰 slots:
    	槽函数声明
    
    在类的cpp
    槽函数定义
    
    在合适地方建立信号与槽的关联,一般在对象初始化处
    

    多窗体应用程序设计

    主要的窗体类及其用途

    常见的窗体基类是QWidget, QDialog, QMainWindow
    创建GUI应用程序时选择窗体基类就是从这3个类中选择
    QObject直接派生了QWidget和QWindow
    QWidget直接派生了QDialog, QMainWindow, QSplashScreen, QMidSubWindow, QDesktopWidget
    这些窗体类的主要特点和用途
    - QWidget
    没有指定父容器时,可作为独立的窗口
    指定父容器后可作为容器的内部组件
    - QDialog
    用于设计对话框,以独立窗口显示
    - QMainWindow
    用于设计带有菜单栏,工具栏,状态栏的主窗口,一般以独立窗口显示
    - QSplashScreen
    用作应用程序启动时的splash窗口,没有边框
    - QMidSubWindow
    用于为QMidArea提供一个子窗体,用于MDI[多文档]应用程序的设计
    - QDesktopWidget
    具有多个显卡和多个显示器的系统有多个桌面,
    这个类型提供用户桌面信息,如屏幕个数,每个屏幕大小等
    - QWindow
    通过底层的窗口系统表示一个窗口的类
    一般作为一个父容器的嵌入式窗体,不作为独立窗体
    

    窗体类重要特性的设置

    窗体显示或运行的一些特性可通过QWidget的一些函数设置
    QDialog
    void setAttribute(...)
    Qt::WindowFlags windowFlags()
    void setWindowFlags(...)
    QWidget类中用于窗体属性设置的几个主要函数的功能
    

    setAttribute

    QWidget
    // Qt::WidgetAttribute
    void setAttribute(...)
    枚举类型Qt::WidgetAttribute定义了窗体的一些属性,可打开或关闭这些属性
    枚举类型Qt::WidgetAttribute常用的常量及其意义
    Qt::WidgetAttribute常用常量
    Qt::WA_AcceptDrops						允许窗体接收拖放来的组件
    Qt::WA_DeleteOnClose					窗体关闭时删除自己,释放内存
    Qt::WA_Hover									鼠标进入或移出窗体时产生paint事件
    Qt::WA_AcceptTouchEvents			窗体是否接受触屏事件
    

    setWindowFlags

    QWidget
    // Qt::WindowFlags是枚举类型Qt::WindowType的值的组合,用于同时设置多个标记
    void setWindowFlags(...)
    // Qt::WindowType用于一次设置一个标记
    void setWindowFlag(...)
    枚举类型Qt::WindowType常用的值
    表示窗体类型的常量
    
    Qt::Widget										这是QWidget类的缺省类型
    												这种类型的窗体,
    												如有父窗体,
    												就作为父窗体的子窗体
    												否则,作为一个独立的窗口
    
    Qt::Window										这个窗体是一个窗口,
    												有窗口的边框,标题栏,
    												不管它是否有父窗体
    
    Qt::Dialog										表明这个窗体是一个窗口
    												且要显示为对话框
    												是QDialog类的缺省类型
    
    Qt::Popup										表明这个窗体是用作弹出式菜单的窗体
    Qt::Tool										表明这个窗体是工具窗体,
    												有更小的标题栏和关闭按钮
    												通常作为工具栏的窗体
    Qt::ToolTip										表明这是用于Tooltip消息提示的窗体
    Qt::SplashScreen								表明窗体是splash屏幕,
    												QSplashScreen类的缺省类型
    Qt::Desktop										表明窗体是桌面,
    												是QDesktopWidget类的类型
    Qt::SubWindow									表明窗体是子窗体,
    												如QMdiSubWindow就是这种类型
    	
    控制窗体显示效果的常量
    Qt::MSWindowsFixedSizeDialogHint				在Windows平台上,
    												使窗口有更窄的边框,
    												用于固定大小对话框
    Qt::FramelessWindowHint							创建无边框窗口
    定制窗体外观的变量,要定义窗体外观,要先设置Qt::CustomizeWindowHint
    Qt::CustomizeWindowHint							关闭缺省的窗口标题栏
    Qt::WindowTitleHint								窗口有标题栏
    Qt::WindowSystemMenuHint						有窗口系统菜单
    Qt::WindowMinimizeButtonHint					有最小化按钮
    Qt::WindowMaximizeButtonHint					有最大化按钮
    Qt::WindowMinMaxButtonsHint						有最小化,最大化按钮
    Qt::WindowCloseButtonHint						有关闭按钮
    Qt::WindowContextHelpButtonHint					有上下文帮助按钮
    Qt::WindowStaysOnTopHint						窗口总是处于最上层
    Qt::WindowStaysOnBottomHint						窗口总是处于最下层
    Qt::WindowTransparentForInput					窗口只作为输出,不接受输入
    
    Qt::Widget, Qt::Window等表示窗体类型的常量可使窗体有缺省的外观设置
    如设置为Qt::Dialog类型,则窗体具有对话框等缺省外观
    

    setWindowState

    QWidget
    // Qt::WindowStates
    void setWindowState(...)
    
    	枚举类型Qt::WindowState表示了窗体的状态,取值见下
    	Qt::WindowNoState						正常状态
    	Qt::WindowMinimized						窗口最小化
    	Qt::WindowMaximized						窗口最大化
    	Qt::WindowFullScreen					窗口填充整个屏幕,且没有边框
    	Qt::WindowActive						变为活动的窗口,例如可接收键盘输入
    

    setWindowModality

    setWindowModality用于设置窗口的模态
    QWidget
    // Qt::WindowModality
    void setWindowModality(...)
    
    	Qt::WindowModality的常量
    	Qt::NonModal									无模态,不会阻止其他窗口的输入
    	Qt::WindowModal									窗口对于其父窗口,
    													所有的上级父窗口都是模态的
    	Qt::ApplicationModal							窗口对整个应用程序是模态的,
    													阻止所有窗口的输入
    

    setWindowOpacity

    设置窗口的透明度
    QWidget
    // qreal  1.0为完全不透明,0.0为完全透明
    void setWindowOpacity(...)
    

    多窗口应用程序设计

    主窗口设计

    QMainWindow
    void setCentralWidget(...)
    void setWindowState(...)
    void paintEvent(QPaintEvent*)
    
    QPainter
    void drawPixmap(...)
    
    QPixmap
    new QPixmap(...)
    
    QTabWidget
    void setVisible(...)
    void clear()
    void setTabsClosable()
    
    - QFormDoc
    继承于QWidget可视化设计的窗体
    - QFormTable
    继承于QMainWindow可视化设计的窗体
    - QWDialogSize和QWDialogHeaders
    

    QFormDoc类设计

    File->New File or Project-->Qt Designer Form Class
    
    QToolBar
    void addAction(...)
    void addSeparator(...)
    void setToolButtonStyle(...)
    
    QVBoxLayout
    new QVBoxLayout()
    void addWidget(...)
    void setContentsMargins(...)
    void setSpacing(...)
    
    QWidget
    void setLayout(...)
    

    QFormDoc类的使用

    QWidget
    void setAttribute(...)
    void setWindowTitle(...)
    void setWindowFlag(...)
    void setWindowOpacity(...)
    void setWindowModality(...)
    void show()
    
    QTabWidget
    void addTab(...)
    void setCurrentIndex(...)
    void setVisible(...)
    
    QString
    QString asprintf(...)
    
    父亲窗口关闭时,所有子窗口自动关闭和删除
    

    QFormTable类的设计

    QMainWindow
    
    QStandardItemModel
    QTableView
    

    QFormTable类的使用

    计算是从QMainWindow继承的窗口类,也可在其他界面组件里嵌入式显示
    

    QTabWidget类的控制

    QTabWidget的两个信号
    tabCloseRequested(...),在单击分页的关闭图标时发射
    currentChanged(...),删除一个分页或切换页面时,会发射
    
    QTabWidget
    QWidget* widget(...)
    int count()
    void setVisible(...)
    
    QWidget
    void close()
    

    MDI应用程序设计

    MDI简介

    Qt为MDI应用程序提供了支持
    MDI即为在主窗口里创建多个同类型的MDI子窗口
    这些MDI子窗口在主窗口里显示,共享主窗口的工具栏,菜单等操作功能
    主窗口上的操作都针对当前活动的MDI子窗口进行
    
    设计MDI应用程序需在主窗口工作区放置一个QMdiArea作为子窗体的容器
    

    文档窗口类QFormDoc的设计

    以可视化方式创建一个基于QWidget的类QFormDoc
    QFile
    bool open(...)
    void close()
    
    QTextStream
    new QTextStream(...)
    ? readAll()
    
    QFileInfo
    QString filename()
    
    QPlainTextEdit
    void clear()
    void setPlainText(...)
    QFont font()
    void setFont(...)
    void cut()
    void copy()
    void paste()
    
    QFontDialog
    QFont getFont(...)	
    	
    作为MDI子窗口,不管其是否设置为关闭时删除
    在主窗口里关闭一个MDI子窗口时,
    会删除子窗口对象
    

    MDI主窗口设计与子窗口的使用

    主窗口界面设计

    要在主窗口实现MDI功能
    只需在主窗口的工作区放置一个QMdiArea组件
    QMainWindow
    void setCentralWidget(...)
    
    QToolBar
    void setToolButtonStyle(...)
    

    MDI子窗口的创建与加入

    QMdiArea
    void addSubWindow(...)
    ? subWindowList()
    ? activeSubWindow()
    
    QDir
    QString currentPath()
    
    QFileDialog
    QString getOpenFileName(...)
    
    QString
    bool isEmpty()
    
    QWidget
    void setEnabled(...)
    

    QMdiArea常用功能函数

    QMidArea
    void cascadeSubWindows()
    void tileSubWindows()
    void closeAllSubWindows()
    void setViewMode(...)
    void setTabsClosable(...)
    
    MDI视图模式用setViewMode
    - QMdiArea::SubWindowView传统子窗口模式
    - QMidArea::TabbedView是多页显示模式,类似QTabView
    

    MDI的信号

    QMdiArea有一个信号subWindowActivated(QMdiSubWindow*),在当前活动窗口切换时发射
    用此信号可在活动窗口切换时进行一些处理
    

    Splash与登录窗口

    QSplashScreen,提供了载入图片,自动设置窗口无边框效果等功能
    Splash窗口和登录界面实质都是对话框
    在程序启动时,显示
    
    - 如何实现Splash特点的无边框对话框
    - 如何设计用鼠标拖动无边框的对话框
    - 如何使用QSettings类存储用户名,密码等信息
    - 如何用QCryptographicHash类进行字符串加密
    - 如何根据登录输入状况确定启动主窗口或终止程序运行
    

    对话框界面设计和类设计

    采用新建Qt Designer Form Class的方法创建启动登录对话框,从QDialog继承而来
    QPoint
    QString
    
    
    void mousePressEvent(QMouseEvent*)
    void mouseMoveEvent(QMouseEvent*)
    void mouseReleaseEvent(QMouseEvent*)
    

    QDlgLogin类功能实现

    构造函数里的初始化

    QLineEdit
    // QLineEdit::Password
    void setEchoMode(...)	
    
    QDialog
    // Qt::SplashScreen
    // Qt::FramelessWindowHint
    void setWindowFlags(...)
    

    应用程序设置的存储

    QSettings
    QVarient value(...)
    void setValue(...)
    
    QVarient
    bool toBool()
    QString toString()
    
    创建QSettings对象时,需传递organization和appName
    注册表参数以"键-键值"来保存
    

    字符串加密

    QCryptographicHash只提供了加密功能,没提供解密功能
    QCryptographicHash
    // QCryptographicHash::Md5
    QCryptographicHash(...)
    void addData(...)
    QByteArray result()
    
    QByteArray
    void append(...)
    QString toHex()
    

    用户名和密码输入判断

    QLineEdit
    QString text()
    
    QString
    QString trimmed()
    

    窗口拖动功能的实现

    QMouseEvent
    // Qt::LeftButton
    ? button()
    QPoint globalPos()
    
    QPoint
    // QApplication::startDragDistance
    ? manhattanLength()
    

    Splash登录窗口的使用

    QDialog
    // QDialog::Accepted
    // ...
    ? exec() 
    
    展开全文
  • 当应用程序不是 UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。  堆栈信息:  [InvalidOp...
  • 常规的在Activity里创建对话框方式肯定是不行的了,此时我们应该想到对话框风格的窗体,就是这篇文章我要讲的。   这种对话框本质上仍是一个窗体,只是把显示的窗口的Activity的风格换成了对话框的风格即可...
  • 当应用程序不是 UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。 我的程序是一个WebService,在晚上查了...
  • 当应用程序不是 UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。 原来MessageBox.Show(es.Message);这...
  • 让非模式对话框模拟模式对话框

    千次阅读 2009-11-30 16:46:00
     分析:由于用Java实现模式对话框需要JFrame父窗体对象,所以,只能在JAVA里构造一个非模式的对话框,给VC++调用。这样就要求在VC++里,将这个非模式对话框模拟成模式对话框。在VC++中,模式对话框和非模式对话框都...
  • 模式对话框与无模式对话框

    千次阅读 2012-03-22 12:43:58
    1、ShowDialog()无模式对话框 BabyWindow.ShowDialog(); // //显示窗体 ;,.ShowDialog()无模式对话框 “无模式”窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体。用户在该窗体显示的同时可...
  • 模式对话框和非模式对话框的区别

    千次阅读 2013-08-21 22:53:27
    1、显示模式对话框需要调用CDialog::DoModal,而显示模式对话框则要调用CDialog::Create。DoModal要等到对话框被清除才返回。而和DoModal不同,一旦建立对话框,Create就返回。因此,Create返回时对话框还处于显示...
  • 模式对话框与非模式对话框的区别

    千次阅读 2018-09-28 14:56:47
    模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口...
  • 模式对话框

    2013-09-03 19:23:21
    模式(modal)对话框,即模态对话框,是指用户在Windows应用程序的对话框中,想要对...模式对话框是指用户只能在当前的窗体中进行操作,在该窗体没有关闭之前不能切换到其他的窗体。非模式对话框是指当前的所操作的窗体
  • EVC 非模式对话框如何显示和隐藏(或者对话框之间如何相互调用) 悬赏分:80 - 提问时间2008-6-2 20:43 问题为何被关闭 在VC6下面可以用cpropertysheet,但是在EVC中不支持向导,郁闷中,自己在vc6下面用对话框指针...
  • winform模式对话框和非模式对话框

    千次阅读 2009-07-23 15:34:00
    winform模式对话框和非模式对话框对于窗体的show和showdialog方法,大部人知道它们的区别,show是显示窗体后,本项目中的其他窗体也能获得焦点,而showdialog则不然,只能当前窗体的激活状态。这只是一方面。另一...
  • Form form1 = new form(); form1.TopLevel = false;//设置该窗体不为顶级窗体。 form1.show();//正常 form1.showdialog();//错误,因为TopLevel属性为false.
  • 模式和非模式对话框

    2021-01-14 12:52:35
    模式和无模式对话框 可以使用类 CDialog 来管理两种类型的对话框: 1:模式对话框,要求用户在继续之前做出响应。 2:无模式对话框,可随时停留在屏幕上,但允许其他用户活动使用。 现在,通过程序来看一下什么是...
  • !... 主窗口上面是一个容器panel,里面有3个下拉框,左边是一个toolStrip菜单栏,剩余部分是一个panel1(用来... // 添加w1窗体这里显示:非顶级窗体不能显示模式对话框。在调用 Show 之前应从所有父窗体中移除该窗体
  • 使用API函数CreateDialog和CreateDialogParam。...如果资源中没有指定WS_VISIBLE属性,则非模式对话框创建后不会立刻显示出来,要调用Showwindow函数才能让其显示。 、、、、、、、、、、、、、、、、
  • 1、之前调试一直出现“已经可的窗体不能显示模式对话框...”的错误;2、最早其实网上很多说法都行,只是在调用主窗体A的控件值时,会默认以为要的是弹出窗体B的控件值;3、后来是这样解决的:主窗口A: DX_...
  • 当应用程序不是 UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。......因为部署好程序后,发现了此问题,...
  • 当有弹出窗体时,主窗体也可以编辑,这样的窗体称为非模式窗体,又叫做无在弹出窗体时,弹出的窗体进行编辑,而主窗体不能被编辑,这样的窗体称为模式窗口,又叫模态窗口。当有弹出窗体时,主窗体也可以编辑,...
  • VC下创建一个新的窗口主要有两种模式,一种是创建后主窗口失去鼠标焦点,只有子窗口能获取到用户输入和用户操作,这种方式比如网页弹出警告框,我们必须先处理弹框内的操作才能再去控制浏览器,称之为有模式对话框;...
  • Qt 半模式对话框

    2019-03-14 22:14:00
    今天看视频,学习好半模式对话框,好新奇哟,这里记录下来。 半模式对话框,介于模式对话框和飞模式对话框之间。半模式对话框会像模式对话框一样阻塞主界面的事件响应,同时,半模式对话框会像非模态对话框一样,...
  •   模式对话框主要是阻止对主窗口的操作,要求用户必须对对话框进行应答后才可以回到主窗口,比如颜色选择,字体设置,一些必要信息输入等,这个时候就要用模式对话框,然而还有些时候需要用非模式对话框,这样...
  • Visual C++ MFC 对话框的形式承载 Windows 窗体用户控件MFC 提供模板类 CWinFormsDialog,使用该类可以在模式或无模式 MFC 对话框中承载 Windows 窗体用户控件 (UserControl)。CWinFormsDialog 是从 MFC 类 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,074
精华内容 7,629
关键字:

以模式对话框的方式显示窗体