当前位置: 首页 > news >正文

QT(6)Basic Layout学习

  资料来源:http://doc.qt.nokia.com/latest/layouts-basiclayouts.html ,在这里,我们学习下面几个方面:

以QDialog或其继承为主体,建立程序 菜单menu的建立 GroupBox的使用,加入水平摆放的QHBoxLayout和格子摆放的QGridLayout、QFormLayout QDialogButtonBox的使用

以QDialog建立程序主体框架

  如果我们不采用QWidget的方式,直接采用QDialog(是QWidget的一个subclass),对于创建一个Dialog,其架构可以简单为:

int main(int argc, char * argv[])
{
QApplication app(argc,argv);

Dialog dialog;
return dialog.exec();
}

  创建一个Dialog的类,使用dialog.hdialog.cpp。在*.h中

class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
}

  在*.cpp中创建函数为

Dialog::Dialog()
{
QVBoxLayout * mainLayout = new QVBoxLayout;
// ... ... 纵向排放各个widget
setLayout(mainLayout);
setWindowTitle(tr("Basic Layout Test!"));
}

建立菜单Menu

  在dialog上加一个菜单,该菜单为QMenuBar,在菜单栏中加入QMenu菜单,菜单中单元为QAction,也允许潜入QMenu。下面是例子:

QMenuBar * menuBar = new QMenuBar; //创建QMenuBar
QMenu * fileMenu = new QMenu(tr("&File"),this); //创建QMenu
QAction * exitAction = fileMenu -> addAction (tr("E&xit")); //在QMenu中加入entry,并获得返回值Action,用于我们建立connect。也可以通过fileMenu->addMenu (**)方式,支持多成菜单,通过fileMenu->addSeperator 方式加入分割。
menuBar -> addMenu(fileMenu); //将QMenu 加入QMenuBar中,可以加入多个
connect (exitAction ,SIGNAL(triggered ()),this,SLOT(accept ())); //对QAction的点击(trigger),这里出发Dialog的accpet(hide dialog并返回QDialog::Accepted的值)。
mainLayout -> setMenuBar (menuBar); //加入dialog(QDialog是QWidget的一个子类)

GroupBox的使用:加入水平摆放的QHBoxLayout

  这里给出一个采用水平Layout的GroupBox的例子,如图:

QGroupBox horizontalGroupBox = new QGroupBox (tr("Horizontal Layout"));
QHBoxLayout * layout = new QHBoxLayout;
... ... // layout->addWidget(buttons1);分别加入4个button
horizontalGroupBox->setLayout (layout);
mainLayout -> addWidget (horizontalGroupBox);

GroupBox 的使用:加入QGridLayout

  加入QGridLayout 的方法同QHBoxLayout没什么不同,不过在这里我们希望有一个元素占据多个Grid的格子,例如我们计划要一个4*3尺寸的gride,我们希望有一个QTextEdit占据最后一列,我们可以使用:layout->addWidget(editor,0,2,4,1); 其中 0,2表示位于第0行和第2列,4表示纵向延伸,共占4行,1表示共占1列。

  我们还需要注意到的是GridLayout并没有说是各行各列的大小均等,我们使用addColumnStretch来设置伸展因子,例如我们要求这个例子中第2列是第1列宽度的两倍。可以使用layout->setColumnStretch(1,10);layout->setColumnStretch(2,20);将它们的伸展因素设置为10和20。

GroupBox的使用,加入QFormLayout

  QFormLayout 和QGridLayout类似,作为表格方式,通常是N行2列,第0列为QLabel或者QString,实际都是摆放一个QString,第1列为组建。并前将第一列的QLabel和第1列的组件进行了setBuddy ,也就是QLabel如果定义了快捷方式,就会直接定位到组建上去。例如layout->addRow(tr("Line &1:"),new QLineEdit);相当于在QGridLayout的某个顺序位置上,加上一个QLable,其中快捷键为“1”,以及一个QLineEdit的widget。

formGroupBox = new QGroupBox (tr("Form Layout"));
QFormLayout * layout = new QFormLayout;

layout->addRow (tr("Line & 1:"),new QLineEdit);
layout->addRow (tr("Line &2,long text:"),new QComboBox);
layout->addRow (tr("Line &3:"),new QSpinBox);
formGroupBox -> setLayout (layout);
mainLayout -> addWidget (formGroupBox);

QDialogButtonBox的使用

  在dialog中,我们可以使用自带的button,通才是OK,Cancel。在按这些键的时候,对应的singal为accepted和rejected,我们可以和具体SLOT函数对应起来,在这里我们简单地和系统默认函数对应达到关闭的效果。

buttonBox = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
connect (buttonBox,SIGNAL(accepted()) ,this,SLOT(accept()));
connect (buttonBox,SIGNAL(rejected()) ,this,SLOT(reject()));
mainLayout -> addWidget(buttonBox);

相关链接: 我的MeeGo/Moblin相关文章

相关文章:

  • EventSource
  • UTC时间转换为标准时间
  • 软件工程(二)可行性分析
  • OOM-KILLer的演进与新的启发式策略
  • JMS学习(二)之ActiveMQ
  • 断点上有一个斜杠
  • 第九周
  • S3C2440-IIS放音
  • 记住密码超简单实现(C#)
  • CSS布局居中
  • Servlet和JSP关系浅析
  • selenium 获取某元素的 某属性 的值
  • BestCoder Round #81 (div.2) 1003 String
  • 2010年架构社区回顾:悠长的一年
  • 【VS开发】使用VS2010创建MFC ActiveX工程项目
  • @angular/forms 源码解析之双向绑定
  • 【技术性】Search知识
  • 2018一半小结一波
  • 30秒的PHP代码片段(1)数组 - Array
  • Centos6.8 使用rpm安装mysql5.7
  • CentOS7 安装JDK
  • Codepen 每日精选(2018-3-25)
  • conda常用的命令
  • fetch 从初识到应用
  • iOS编译提示和导航提示
  • JDK9: 集成 Jshell 和 Maven 项目.
  • jquery ajax学习笔记
  • leetcode讲解--894. All Possible Full Binary Trees
  • Sass 快速入门教程
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 配置 PM2 实现代码自动发布
  • 前端面试之CSS3新特性
  • 【云吞铺子】性能抖动剖析(二)
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • # C++之functional库用法整理
  • #Java第九次作业--输入输出流和文件操作
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (10)STL算法之搜索(二) 二分查找
  • (23)Linux的软硬连接
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • .Net Memory Profiler的使用举例
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • @Data注解的作用
  • @JoinTable会自动删除关联表的数据
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ solr入门 ] - 利用solrJ进行检索
  • [4.9福建四校联考]
  • [Android] Upload package to device fails #2720
  • [Android]通过PhoneLookup读取所有电话号码