6 对话框与多窗体设计

6 对话框与多窗体设计

标准对话框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

自定义对话框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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(); //非模态显示对话框
}

多窗体应用程序设计

MDI应用程序设计

1
2
3
4
5
6
7
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与登录窗口

  • 一般使用textLabel来放置图片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //字符串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); //解决汉字乱码问题
作者

步步为营

发布于

2024-05-08

更新于

2025-03-15

许可协议