介绍

Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。

对话框分类

对话框可以分为模态对话框,和非模态对话框。
模态对话框:会阻塞同一应用程序中其它窗口的输入,我们是不能对除此对话框之外的窗口部分进行操作的。可以选择点击Qt creator 上的【帮助】->[关于插件] 查看案例

非模态对话框:我们可以同时在展示对话框的同时,进行其他操作。。可以选择点击Qt creator 上的【帮助】->[关于Qt creator ] 查看案例

案例实现

  • 模态对话框
    connect(ui->actionnew,&QAction::triggered,[=](){//模态对话框QDialog * dia = new QDialog(this);//设置对话框大小dia->resize(200,50);//进入阻塞,下面的语句会先不执行dia->exec();QDebug()<<"模态对话框";});

  • 非模态对话框
    connect(ui->actionnew,&QAction::triggered,[=](){//非模态对话框QDialog * dia = new QDialog(this);dia->resize(200,50);dia->show();//设置关闭即释放,防止内存泄漏dia->setAttribute(Qt::WA_DeleteOnClose);//下面语句会执行QDebug()<<"非模态对话框";});

消息对话框

错误对话框

QMessageBox::critical(this,"critical","错误");

消息对话框

QMessageBox::information(this,"information","消息");

问题对话框

        if(QMessageBox::Save == QMessageBox::question(this,"question","问题",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)){qDebug()<<"点击保存";}else{ qDebug()<<"点击取消";}

颜色对话框

QColor color = QColorDialog::getColor(QColor(255,0,0));qDebug()<<color.red()<<color.green()<<color.blue();

文件对话框

        QString str = QFileDialog::getOpenFileName(this,"打开文件","G:\BaiduNetdiskDownload\QT从入门到实战完整版资料\day1资料\Doc");qDebug()<<str;

字体对话框

        //字体对话框bool flag;QFont font = QFontDialog::getFont(&flag,QFont("宋体",26));qDebug()<<font.family();

登录界面制作

  • 在ui文件中,拉取label和编辑行,将上面的两个标签和编辑行使用栅格布局,将两个按钮放入一个widget中,然后使用”弹簧"来设置距离,优化界面,密码采用password类型
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>510</width><height>375</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralWidget"><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QWidget" name="widget_3" native="true"><widget class="QWidget" name="widget" native="true"><property name="geometry"><rect><x>120</x><y>70</y><width>260</width><height>71</height></rect></property><layout class="QGridLayout" name="gridLayout"><item row="0" column="0"><widget class="QLabel" name="label"><property name="text"><string>用户名:</string></property></widget></item><item row="0" column="1"><widget class="QLineEdit" name="lineEdit_2"/></item><item row="1" column="0"><widget class="QLabel" name="label_2"><property name="text"><string>密码:</string></property></widget></item><item row="1" column="1"><widget class="QLineEdit" name="lineEdit"><property name="text"><string/></property><property name="echoMode"><enum>QLineEdit::Password</enum></property></widget></item></layout></widget><widget class="QWidget" name="widget_2" native="true"><property name="geometry"><rect><x>130</x><y>170</y><width>241</width><height>71</height></rect></property><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>20</x><y>20</y><width>93</width><height>28</height></rect></property><property name="text"><string>登录</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>130</x><y>20</y><width>93</width><height>28</height></rect></property><property name="text"><string>取消</string></property></widget></widget></widget></item></layout></widget><widget class="QMenuBar" name="menuBar"><property name="geometry"><rect><x>0</x><y>0</y><width>510</width><height>26</height></rect></property><widget class="QMenu" name="menu"><property name="title"><string>文件</string></property><addaction name="actionnew"/><addaction name="actionopen"/></widget><widget class="QMenu" name="menu_2"><property name="title"><string>编辑</string></property></widget><addaction name="menu"/><addaction name="menu_2"/></widget><widget class="QToolBar" name="mainToolBar"><attribute name="toolBarArea"><enum>TopToolBarArea</enum></attribute><attribute name="toolBarBreak"><bool>false</bool></attribute></widget><widget class="QStatusBar" name="statusBar"/><action name="actionnew"><property name="text"><string>新建</string></property></action><action name="actionopen"><property name="text"><string>打开</string></property></action></widget><layoutdefault spacing="6" margin="11"/><resources/><connections/>
</ui>

QtCreator的界面预览: Shift + Alt + R

控件-按钮

QPushButton 常用按钮
QToolButton 工具按钮 用于显示图片,如图想显示文字,修改风格:toolButtonStyle , 凸起风格autoRaise
radioButton 单选按钮,设置默认 ui->rBtnMan->setChecked(true);
checkbox多选按钮,监听状态,2 选中 1 半选 0 未选中

QListWidget 列表容器

        //listWidget写QListWidgetItem * item = new QListWidgetItem("11111");//item->setTextAlignment(Qt::AlignHCenter);ui->listWidget->addItem(item);QStringList list;//相当于List<String>list<<"22222"<<"33333";ui->listWidget->addItems(list);

QTreeWidget 树控件

    //设置头ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");//创建根节点QTreeWidgetItem * liitem = new QTreeWidgetItem(QStringList()<<"力量");QTreeWidgetItem * minitem = new QTreeWidgetItem(QStringList()<<"敏捷");QTreeWidgetItem * zhiitem = new QTreeWidgetItem(QStringList()<<"智力");//加载顶层节点ui->treeWidget->addTopLevelItem(liitem);ui->treeWidget->addTopLevelItem(minitem);ui->treeWidget->addTopLevelItem(zhiitem);//追加子节点QStringList heroL1;heroL1 << "刚被猪" << "前排坦克,能在吸收伤害的同时造成可观的范围输出";QTreeWidgetItem * subliitem = new QTreeWidgetItem(heroL1);liitem->addChild(subliitem);

TableWidget模块

//TableWidget模块//设置列数ui->tableWidget->setColumnCount(3);//设置水平表头ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");//设置行数ui->tableWidget->setRowCount(3);//设置正文QStringList nameList;nameList<<"a"<<"b"<<"c";QList<QString> sexList;sexList<<"男"<<"女"<<"男";for(int i = 0;i<3;i++){int col = 0;ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]) );ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList[i]));ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i + 18)));}

stackedWidget 栈控件

首先在界面中拉取栈控件,然后再拉入两个按钮

 connect(ui->pushButton,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(0);});connect(ui->pushButton_2,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(1);});


使用label 显示动图

    QMovie * mov = new QMovie(":/Image/mario.gif");ui->movla->setMovie(mov);mov->start(); //开启

自定义控件

  • 创建一个项目,在项目文件中添加设计师界面类

  • 在新建的ui中,自定义组件


在其中的源文件中绑定信号和槽函数之间的关系

    //使用函数指针来连接信号和槽void(QSpinBox:: *spinboxsignal)(int) = &QSpinBox::valueChanged;void(QSlider:: *slidersignal)(int) = &QSlider::setValue;connect(ui->spinBox,spinboxsignal,ui->horizontalSlider,slidersignal);//qt4的写法connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->spinBox,SLOT(setValue(int)));

实现了两个组件在其后一个值发生变化之后,另一个都会发生变化

  • 定义一个get和set函数,方便之后获取值
    首先在头文件中定义
    然后再源文件中实现
//定义void setv(int num);int getv();
//实现
void SmallWidget::setv(int num)
{ui->horizontalSlider->setValue(num);
}int SmallWidget::getv()
{return ui->horizontalSlider->value();
}
  • 将自定义的控件加入到主界面
    首先在主界面定义一个widget,用来存放自定义控件

    在widget中,右键选择提升为,


    类名称需要填写刚刚定义的类名称,先【添加】然后【提升】,运行即可看到结果
  • 为了使用刚刚定义的get和set方法
    定义两个按钮,一个对应get,一个对应set,分别绑定对应的函数即可
    connect(ui->getbtn,&QPushButton::clicked,[=](){qDebug()<<ui->widget->getv();});connect(ui->setbtn,&QPushButton::clicked,[=](){ui->widget->setv(20);});

(四)对话框QDialog 以及控件相关推荐

  1. VC 对话框背景颜色 控件颜色

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  2. SAP UI5 应用开发教程之一百零四 - SAP UI5 表格控件的支持复选(Multi-Select)以及如何用代码一次选中多个表格行项目

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  3. MFC对话框与基础控件个性化

    本文涉及以下几个疑难问题: 1. 改正对话框的背景颜色 2. 用位图作为对话框的背景 3. 改变静态控件文字和背景颜色 4. 改变编辑框文字和背景颜色 5. 改变CheckBox的文字和背景颜色 6. ...

  4. 改变MFC对话框背景色、控件内的字体颜色和背景色

    原文转自http://www.rosoo.net/a/201408/17018.html C 设置 Dialog, Group Box, Static Text, Check Box, Edit Ct ...

  5. jquery easyui 弹出对话框被activex控件遮挡问题

    为什么80%的码农都做不了架构师?>>>    参考:http://bbs.csdn.net/topics/390375764 本人遇到jquery easyui 弹出对话框被act ...

  6. MFC设置对话框背景色及控件颜色

    MFC设置对话框背景色及控件颜色 一.使用背景图片更改对话框背景色 在对话框源文件void CxxDlg::OnPaint()函数中 if (IsIconic()) { (这里省略) } else { ...

  7. 机房系统(四)——【分页控件SSTab】

    在机房结账窗体中,有一个带有选项卡的控件--SSTab.下面介绍一下它的用法. 1.作用: 采用分页形式查询或编辑数据表中的数据 2.添加到控件箱: 菜单命令:工程 | 部件,选择:Microsoft ...

  8. MFC子线程访问主线程对话框程序的控件对象

    最近在使用 VC 开发软件时需要用到多线程同步来解决开发过程中遇到的问题.本来以为只要象控制台程序一样,在主线程创建子线程,并设置好相应的对象事件就能解决问题,但是等到真正做起来,才在实践中发现原来事 ...

  9. 鸡啄米MFC教程笔记之七:对话框:为控件添加消息处理函数

    MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们点击按钮时就会产生BN_CLICKED消息,修改编辑框内容时会产生EN_CHANGE消息等.一 ...

最新文章

  1. java显示当月数据_Java统计当月与往月数据 使用StringTemplate
  2. JavaScript的案例(数据校验,js轮播图,页面定时弹窗)
  3. 一道面试题引发的关于程序设计的想法
  4. hdu-2204 Eddy's爱好 nyoj 526
  5. centos安装java的jdk
  6. 阿里云容器服务cni网络插件terway非官方网络性能测试
  7. ACM卡常处理办法(虽然我到现在没遇到)
  8. 图像处理技术之分辨率与压缩
  9. 温度补偿计算公式_一种工业用温度测量模块的设计与实现
  10. 再谈RetinaNet
  11. sqlyog通过跳板机ssh连接mysql数据库
  12. Smart3D模型合并
  13. js+java实现登录滑动图片验证功能
  14. windows——win10如何远程控制另一台电脑
  15. 移动云计算的四大特点
  16. 电车难题和他的n个**变种分享
  17. python : pandas 中多重索引multiindex与多个标的dataframe
  18. 阿里云域名优惠口令获取方法
  19. C语言记录支出的程序,家庭支出管理系统—c语言程序设计教案.doc
  20. 如何将磁盘从GPT格式转换成MBR

热门文章

  1. 笔记本电脑蓝牙搜索不到蓝牙耳机
  2. 发展慢不一定是缺点,没有泡沫才是关键
  3. 实操:只有6000粉丝的公众号,流量主收入1500
  4. SQL分组后将不存在的组记为0
  5. echarts折线图实线加虚线
  6. mysql查看数据库表的基本命令_mysql查看数据库、表的基本命令
  7. cesium--画线
  8. 万字以上的电商项目 Jmeter 脚本实战测试开发详细讲解
  9. 大语言模型会引发第四次产业革命——智能革命吗?
  10. 3704对象关闭时_当对象关闭时不允许运行时错误'3704'操作