6 对话框与多窗体设计

169 阅读3分钟

标准对话框

image-20211228135829228

image-20211228140031751

QString curPath=QDir::currentPath();//获取系统当前目录
//QString curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径
QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器 需要有两个分号
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
//选择文件夹
QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
//保存文件
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);

//给text设置color
QPalette pal=ui->plainTextEdit->palette(); //获取现有 palette
    QColor  iniColor=pal.color(QPalette::Text); //现有的文字颜色
    QColor color=QColorDialog::getColor(iniColor,this,"选择颜色");
    if (color.isValid()) //选择有效
    {
        pal.setColor(QPalette::Text,color); //palette 设置选择的颜色
        ui->plainTextEdit->setPalette(pal); //设置 palette
    }

//选择字体
  QFont iniFont=ui->plainTextEdit->font(); //获取文本框的字体
  bool   ok=false;
  QFont font=QFontDialog::getFont(&ok,iniFont); //选择字体
  if (ok) //选择有效
     ui->plainTextEdit->setFont(font);
//输入字符串
QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字输入QLineEdit::Password;//密码输入
QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
//QInputDialog::getInt  //输入整数
//QInputDialog::getDouble  //输入浮点数
//QInputDialog::getItem   //条目选择输入

QMessageBox::StandardButton result=QMessageBox::question(this, dlgTitle, strInfo,QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,defaultBtn);
//QMessageBox::information
//QMessageBox::warning
//QMessageBox::critical
//QMessageBox::aboutQt

自定义对话框

void MainWindow::on_actTab_SetSize_triggered()
{ //模态对话框,动态创建,用过后删除
    QWDialogSize    *dlgTableSize=new QWDialogSize(this); //创建对话框
//   dlgTableSize->setAttribute(Qt::WA_DeleteOnClose);
//对话框关闭时自动删除对话框对象,用于不需要读取返回值的对话框
//如果需要获取对话框的返回值,不能设置该属性,可以在调用完对话框后删除对话框
    Qt::WindowFlags flags=dlgTableSize->windowFlags();
    dlgTableSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //设置对话框固定大小

    dlgTableSize->setRowColumn(theModel->rowCount(),theModel->columnCount()); //对话框数据初始化,该类中已经定义了setRowColumn函数

    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; //删除对话框
}

//一次创建,多次调用,对话框关闭时只是隐藏
 if (dlgSetHeaders==NULL) //如果对象没有被创建过,就创建对象
     dlgSetHeaders = new QWDialogHeaders(this);

void MainWindow::on_actTab_Locate_triggered()
{//创建 StayOnTop的对话框,对话框关闭时自动删除
    dlgLocate = new QWDialogLocate(this); //创建对话框,传递指针
    dlgLocate->setAttribute(Qt::WA_DeleteOnClose); //对话框关闭时自动删除对话框对象,用于不需要读取返回值的对话框
    Qt::WindowFlags    flags=dlgLocate->windowFlags(); //获取已有flags
//对话框设置为固定大小和StayOnTop
//    dlgLocate->setWindowFlags(flags |Qt::MSWindowsFixedSizeDialogHint |Qt::WindowStaysOnTopHint); //设置对话框固定大小,StayOnTop
    dlgLocate->setWindowFlags(flags | Qt::WindowStaysOnTopHint); //设置对话框固定大小,StayOnTop
//对话框初始化设置 
//WindowFlags 可以修改是否有最大按钮,是否显示在最前面等信息
    dlgLocate->show(); //非模态显示对话框
}

多窗体应用程序设计

image-20211228161022887

image-20211228161035143

image-20211228161140924

在这里插入图片描述

在这里插入图片描述

image-20211228161636774

image-20211228161706437

在这里插入图片描述

image-20211228170801220

MDI应用程序设计

image-20211229091442079

image-20211229091745821

QFormDoc* formDoc=(QFormDoc*)ui->mdiArea->activeSubWindow()->widget();//拿到的是QMdiSubWindow对象,必须获取其中的weidget
ui->mdiArea->setViewMode(QMdiArea::TabbedView); //Tab多页显示模式
ui->mdiArea->setViewMode(QMdiArea::SubWindowView); //子窗口模式
//窗口级联展开
    ui->mdiArea->cascadeSubWindows();
//平铺展开
    ui->mdiArea->tileSubWindows();

Splash与登录窗口

在这里插入图片描述

image-20211229100407986

  • 一般使用textLabel来放置图片

    	//字符串MD5算法加密
        QByteArray btArray;
        btArray.append(str);//加入原始字符串
        QCryptographicHash hash(QCryptographicHash::Md5);  		//Md5加密算法
        hash.addData(btArray); //添加数据到加密哈希值
        QByteArray resultArray =hash.result(); //返回最终的哈希值
        QString md5 =resultArray.toHex();//转换为16进制字符串
    
     this->setWindowFlags(Qt::SplashScreen); //设置为SplashScreen, 窗口无边框,不在任务栏显示
     this->setWindowFlags(Qt::FramelessWindowHint);//无边框,但是在任务显示对话框标题
    
       //在注册表中保存用户名,密码等设置
        QSettings   settings("WWB-Qt","samp6_5"); //注册表键组
        settings.setValue("Username",m_user); //用户名
        settings.setValue("PSWD",m_pswd);   //密码,经过加密的
    
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
        QTextCodec::setCodecForLocale(codec); //解决汉字乱码问题