读Qt Demo——Basic Layouts Example
此例程主要展示用代码方式创建控件并用Layout管理类对其进行布局;
例程来自Qt5.2,如过是默认安装,代码位于:C:\Qt\Qt5.2.0\5.2.0\mingw48_32\examples\widgets\layouts\basiclayouts
涉及类:QDialog QPushbotton QGroupBox QLabel QLineEdit QComboBox QTextEdit QHBoxLayout QVBoxLayout QFormLayout QGridLayout QMenu QMenuBar

main.cpp
#include <QApplication> #include "dialog.h" int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Dialog dialog;
dialog.show(); return app.exec();
}
dialog.h
#ifndef DIALOG_H
#define DIALOG_H #include <QDialog> class QAction;
class QDialogButtonBox;
class QGroupBox;
class QLabel;
class QLineEdit;
class QMenu;
class QMenuBar;
class QPushButton;
class QTextEdit; class Dialog : public QDialog
{
Q_OBJECT public:
Dialog(); private:
void createMenu();
void createHorizontalGroupBox();
void createGridGroupBox();
void createFormGroupBox(); enum { NumGridRows = 3, NumButtons = 4 }; QMenuBar *menuBar;
QGroupBox *horizontalGroupBox;
QGroupBox *gridGroupBox;
QGroupBox *formGroupBox;
QTextEdit *smallEditor;
QTextEdit *bigEditor;
QLabel *labels[NumGridRows];
QLineEdit *lineEdits[NumGridRows];
QPushButton *buttons[NumButtons];
QDialogButtonBox *buttonBox; QMenu *fileMenu;
QAction *exitAction;
}; #endif // DIALOG_H
dialog.cpp
#include <QtWidgets> #include "dialog.h" Dialog::Dialog()
{
createMenu(); //创键菜单
createHorizontalGroupBox();//创建第一组控件
createGridGroupBox(); //创建第二组控件
createFormGroupBox(); //创建第三组控件 bigEditor = new QTextEdit; //创建一个独立的文本编辑框
bigEditor->setPlainText(tr("This widget takes up all the remaining space "
"in the top-level layout.")); //创建对话框按钮组
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); //连接按钮信号
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); QVBoxLayout *mainLayout = new QVBoxLayout; //创建垂直布局对象
mainLayout->setMenuBar(menuBar); //加入菜单栏
mainLayout->addWidget(horizontalGroupBox); //加入第一组控件
mainLayout->addWidget(gridGroupBox); //加入第二组控件
mainLayout->addWidget(formGroupBox); //加入第三组控件
mainLayout->addWidget(bigEditor); //加入文本编辑框
mainLayout->addWidget(buttonBox); //加入按钮
setLayout(mainLayout); //布局加入app对象 setWindowTitle(tr("Basic Layouts")); //设置窗口标题
} //创建菜单栏
void Dialog::createMenu()
{
menuBar = new QMenuBar; //Dialog类没有菜单栏,所以创建一个 fileMenu = new QMenu(tr("&File"), this); //创建一个菜单
exitAction = fileMenu->addAction(tr("E&xit"));//添加一个菜单选项
menuBar->addMenu(fileMenu); //菜单加入菜单栏里 connect(exitAction, SIGNAL(triggered()), this, SLOT(accept()));//连接菜单信号
} //加入第一组控件
void Dialog::createHorizontalGroupBox()
{
horizontalGroupBox = new QGroupBox(tr("Horizontal layout")); //创建组控件
QHBoxLayout *layout = new QHBoxLayout; //创建水平布局对象 for (int i = 0; i < NumButtons; ++i) { //创建按钮
buttons[i] = new QPushButton(tr("Button %1").arg(i + 1));
layout->addWidget(buttons[i]); //加入布局
}
horizontalGroupBox->setLayout(layout); //将布局好的按钮添加套组控件里
} //加入第二组控件
void Dialog::createGridGroupBox()
{
gridGroupBox = new QGroupBox(tr("Grid layout")); //创建组控件
QGridLayout *layout = new QGridLayout; //创建网格布局对象 for (int i = 0; i < NumGridRows; ++i) {
labels[i] = new QLabel(tr("Line %1:").arg(i + 1)); //创建标签控件
lineEdits[i] = new QLineEdit; //创建行编辑框控件
layout->addWidget(labels[i], i + 1, 0); //将建标签控件放在i+1行,0列位置
layout->addWidget(lineEdits[i], i + 1, 1); //将建标编辑框控件放在i+1行,1列位置
} smallEditor = new QTextEdit; //创建一个文本编辑控件
smallEditor->setPlainText(tr("This widget takes up about two thirds of the "
"grid layout."));
layout->addWidget(smallEditor, 0, 2, 4, 1); //将文本编辑控件放在0行,2列位置,行跨度为4行,列跨读为1列 layout->setColumnStretch(1, 10);//将第1列的控件(行编辑框控件)拉伸系数为10
layout->setColumnStretch(2, 20);//将第2列的控件(文本编辑控件)拉伸系数为20
gridGroupBox->setLayout(layout);
} //加入第三组控件
void Dialog::createFormGroupBox()
{
formGroupBox = new QGroupBox(tr("Form layout"));//创建组控件
QFormLayout *layout = new QFormLayout; //创建表格式布局对象
layout->addRow(new QLabel(tr("Line 1:")), new QLineEdit); //添加第一个标签和行编辑器
layout->addRow(new QLabel(tr("Line 2, long text:")), new QComboBox);//添加第二个标签和行编辑器
layout->addRow(new QLabel(tr("Line 3:")), new QSpinBox);//添加第三个标签和行编辑器
formGroupBox->setLayout(layout);
}
读Qt Demo——Basic Layouts Example的更多相关文章
- 虹软人脸识别——官方 Qt Demo 移植到 Linux
一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...
- 读写锁--DEMO
package com.demo.read.write.lock; import java.util.HashMap; import java.util.Map; import java.util.c ...
- Qt Demo Http 解析网址 Openssl
今天练习了一下Qt 解析http协议,在Demo中使用到了Openssl 一上午的时间都是编译openssl,不过还是没有成功,很遗憾,这里整理了有关这个Demo的本件 网盘连接:见下方评论吧,长传太 ...
- [QT][DEMO] QTableWidget 设置某一列禁止编辑
例程 : 又是好风景 : http://blog.csdn.net/qiao_yihan/article/details/46413345 关键点: 1.QTableWidgetItem 的 setF ...
- 1.Basic Layouts
使用过mfc编程,就知道控件需要自己拖放.当一个界面有很多小控件时,摆放这些控件特别麻烦. 但是qt编程中有布局(Layout),让系统来摆放控件.使整个控件有一致的外观和感觉,特别方便. 1.水平方 ...
- Beginning Android 4 中 Demo Basic/Switch 的问题.
作者的版本: layout (main.xml): <?xml version="1.0" encoding="utf-8"?> <Linea ...
- QT3D场景快速绘制入门学习
在QT中实现3D绘制的方式: 1) 使用QT OpenGL模块(QOpenGLWidget等) 2) 使用QT 3D C++类(QEntity等) 3) 使用QT 3D QML类(Enti ...
- Qt Examples Qt实例汇总
ActiveQt Examples Using ActiveX from Qt applications. Animation Framework Examples Doing animations ...
- Qt Creater中的.pro文件和.pri文件
初学Qt,使用Qt Creater打开Demo "QT 3D Basic Shapes C++ Example",发现除了pro文件外,还有一个pri文件,在此小白一下! *.pr ...
随机推荐
- float label 提示
很多时候,我们写input 都会添加 placeholder 属性,用于提示用户这里该输入什么,怎么输入,但是当用户一旦输入了字符串,该提示就会消失,相信会有人,输入内容后可能会忘记这里要输入的是什么 ...
- poj 1054 The Troublesome Frog (暴力搜索 + 剪枝优化)
题目链接 看到分类里是dp,结果想了半天,也没想出来,搜了一下题解,全是暴力! 不过剪枝很重要,下面我的代码 266ms. 题意: 在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳, 从一 ...
- angular js 实例参数学习
<!DOCTYPE html> <html> <head> <meta name="description" content=" ...
- jQuery避免$符和其他JS库冲突的方法对比
1.如果jquery库在第三方库之后引用.这个时候jquery库会占用$. 解决办法:剔除$符号的使用权. <script type="text/javascript" sr ...
- Mac 配置jdk
1.打开终端,开始操作 cd ~touch.bash_profile vi .bash_profile 2.在此文本中添加以下内容 export JAVA_HOME=/Library/Java/Jav ...
- SharePoint 2010 列表项事件接收器 ItemAdded 的使用方法
列表项事件处理器是继承于Microsoft.SharePoint.SPItemEventReceiver的类,Microsoft.SharePoint.SPItemEventReceiver类提供了许 ...
- 只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果
只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果.这个题目用图表示如下: 如果将题目换成“只用css实现每行四列,加载完一行后数据自动填充到下一行”,那这个问题就简单多了,相信大家都 ...
- codeforces 691D Swaps in Permutation DFS
这个题刚开始我以为是每个交换只能用一次,然后一共m次操作 结果这个题的意思是操作数目不限,每个交换也可以无限次 所以可以交换的两个位置连边,只要两个位置连通,就可以呼唤 然后连通块内排序就好了 #in ...
- C#调用C++导出类(转)
由于使用别人的Dll,导出的是一个实体类,在C#里封送很难,百度下,有个朋友回复一篇英文的,虽然不一定使用,但可以作为一个知识点,现把原文贴下: c#调用C++写的dll导出类,包含继承,重载等详细介 ...
- Python 核心数据类型
1.Python中一切皆对象 2.Python中不需要申明对象类型,对象的类型由运行的表达式决定 3.创建了对象意味着绑定了对象的操作到此对象,也就是在固有的对象上只能调用该对象特有的操作.比如只能将 ...