在 Qt 中,我们将窗口和控件统称为部件(Widget)

窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等。
控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。
QWidget 是所有用户界面元素的基类,窗口和控件都是直接或间接继承自 QWidget,QMainWindow、QWidget、QDialog 三个类就是用来创建窗口的,可以直接使用也可以继承后再使用。
MainWindow的结构分为五个部分:菜单栏(Menu Bar)、工具栏(Toolbars)、停靠窗口(Dock Widgets)、状态栏(Status Bar)和中央窗口(Central Widget).是最常见的窗口形式,可以作为GUI程序的主窗口。中央窗口可以使用任何形式的widget来填充。一般不建议使中央窗口为空。可以使用setCentralWidget()函数来填充中央窗口。

菜单栏是MainWindow中已经有的,需要是就使用menuBar()函数来返回;

状态栏(Status Bar)是MainWindow中已经有的,需要是就使用statusBar()函数来返回;

工具栏需要自己新建,然后在通过addToolBar()函数添加到窗口中。

停靠窗口需要自己通过addDockWidget()添加。.

QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或与用户进行互动,它可以是模态的也可以是非模态的。QDialog 没有菜单栏、工具栏、状态栏等。

1.Qt程序中的主窗口通常具有一个中心窗口部件。调用setCentralWidget()

从理论上来讲,任何继承自QWidget的类的派生类的实例,都可以作为中心窗口部件使用。一般放置在Qworkspace位置。

2.布局流程

a.先创建控件,如new QPushButton

b.使用布局管理器添加控件,完成局部的布局  如 QGridLayout、QHBoxLayout  、QVBoxLayout    调用addWidget

c.使用布局管理器把所有的局部布局整合起来。如 QGridLayout、QHBoxLayout  、QVBoxLayout    调用addLayout

d.调用setLayout 设置全局的布局管理器显示

3.对话框的特殊按钮(如确认和取消)QDialogButtonBox

m_pbutton = new QDialogButtonBox;
m_pbutton->addButton(tr("确定"), QDialogButtonBox::AcceptRole);
m_pbutton->addButton(tr("取消"),QDialogButtonBox::RejectRole);
connect(m_pbutton, SIGNAL(accepted()), this, SLOT(OnOK()));
connect(m_pbutton, SIGNAL(rejected()), this, SLOT(OnCancel()));

4创建工具栏及按钮

1、定义一个QAction对象,设置显示图标和文字;

2、定义一个QToolBar对象;

3、将QAction对象添加到QToolBar对象中;

4、将QToolBar对象添加到待显示的窗口中;

1.setOrientation 设置水平或垂直方向

2.使用布局管理器来设置显示的位置,把工具栏当成一个普通的空间看待即可。

注意:需要在项目中导入新添加的qrc文件(这样目录随之也会被添加进来):

m_aboutAction = new QAction(QIcon(":/res/about.png"), tr("关于"), this);
//或者 m_aboutAction = new QAction(QPixmap(":/res/about.png"), tr("关于"), this);
m_pToolBar = addToolBar(tr("ToolBar"));
m_pToolBar->addAction(m_aboutAction);
connect(m_aboutAction, SIGNAL(triggered()), this, SLOT(aboutSlot()));

或者是

QToolButton *m_about = new QToolButton();
connect(m_about, SIGNAL(clicked()), this, SLOT(aboutSlot()));
m_about->setIcon(QIcon(":/res/about.png"));
m_about->setToolTip("关于");
m_pToolBar->addWidget(m_about);

注:action是一种不可见的界面元素,主要用于菜单项、工具栏按钮的设计,其action的主要信号时trigger().

QMainWindow常用的函数

1.setCentralWidget()设置中心区域

2.statusBar()获取状态栏

QStatusBar 的  addPermanentWidget:永久添加显示

addWidget

insertWidget

3.addToolBar() 添加工具栏

用到QWidget 的 addActions

removeAction

insertAction

QTabWidget:常用的函数

1.addTab

2.insertTab

3.removeTab

4.setTabPosition   //设置tab页的位置方向

5.setCurrentWidget

6.currentChanged 为信号  重点使用,切换tab触发该信号

QTableWidget类函数

1.setEditTriggers(QAbstractItemView::NoEditTriggers); 将表格变为禁止编辑

2.setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式

3.setSelectionMode(QAbstractItemView::SingleSelection  );  //设置为选中单个目标

4.对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置

行:horizontalHeader()->setVisible(false);
列:verticalHeader()->setVisible(false);
QHeaderView::sectionResized//信号,用于处理响应改变列表头的大小宽度
5.在单元格里加入控件:
setCellWidget6.设置行高、列宽
1. tableWidget->setColumnWidth(3,200);
2. tableWidget->setRowHeight(3,60);

将行和列的大小设为与内容相匹配

  1. tableWidget->resizeColumnsToContents();

  2. tableWidget->resizeRowsToContents();

7.获得单击单元格的内容

cellDoubleClicked
或itemDoubleClicked

8.添加表头内容:

QStringList header;

header<<""<<tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5");

tableWidget->setHorizontalHeaderLabels(header);

9.setShowGrid(true);//显示表格线

10.setColumnHidden //设置隐藏列

11.设置垂直滚动条响应

QScrollBar *bar = verticalScrollBar();    connect((QObject*)bar,SIGNAL(valueChanged(int)),this,SLOT(getvalue(int)));

12.int nScrollBarHeight=this->maximumViewportSize().height();//!获取滚动条的滚动范围

13.设置每个item 显示内容

item = new QTableWidgetItem(str);
item->setTextAlignment(Qt::AlignHCenter);
setItem(iItem,iColumn,item);
QTableWidgetItem
1.单元格设置字体颜色和背景颜色 及字体字符、对齐方式
item = new QTableWidgetItem(str);
item->setTextAlignment(Qt::AlignHCenter);
setItem(iItem,iColumn,item);
item->setBackgroundColor(clrBKCur);
item->setTextColor(clrTextCur);

2. setdata()函数设置自定义的数据,该数据是不显示在界面上的,但与单元格相关联的。

使用控件,如需特别设置控件的样式可以使用setStyleSheet来实现。

MVC

MVC 由三种对象组成。Model是应用程序对象,View是它的屏幕表示,Controller定义了用户界面如何对用户输入进行响应

Model:

所有的item models都基于QAbstractItemModel类,这个类定义了用于views和delegates访问数据的接口。

数据本身不必存储在model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的程序组件中。

如果它基于table或list形式的数据结构,最好从QAbstractListModel,QAbstractTableModel开始做起

View:

QListView把数据显示为一个列表,QTableView把Model 中的数据以table的形式表现,QTreeView 用具有层次结构的列表来显示model中的数据。这些类都基于QAbstractItemView抽象基类.

QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

qt用于项(item)的组件有两类:

1.item views,包括qlistview、qtreeview、qtableview、qcolumnview等。 都是基于模型/视图(model/view)结构。

2.item widgets,包括qlistwidget、qtreewidget、qtreewidget、qtablewidget.都是直接将数据存储在每一项。

对话框:

1.好像没有直接通过代码生成对话框的。先在c++ class 基于Qwidget生成 ,再把基从Qwidget改成QDialog,,最后补上析构函数。

2.通过可视化ui生成对话框。

模态对话框:exec()

注意:在new 的方式生成对话框时。在对话框单击按钮或关闭对话框时,即如(模态对话框,exec()函数返回后),对话框只是隐藏(缺省的),而并没有从内存中删除。可以使用delete 删除对话框对象,释放内存。

非模态对话框:show()

调用setAttribute(Qt::WA_DeleteOnClose); 关闭时自动删除,释放内存。

可通过事件触发,如下面的虚函数重写。

virtual void keyPressEvent(QKeyEvent *event);
virtual void keyReleaseEvent(QKeyEvent *event);  virtual void focusInEvent(QFocusEvent *event);  virtual void focusOutEvent(QFocusEvent *event);  virtual void enterEvent(QEvent *event);
virtual void leaveEvent(QEvent *event);   virtual void paintEvent(QPaintEvent *event);
virtual void moveEvent(QMoveEvent *event);   virtual void resizeEvent(QResizeEvent *event);
virtual void closeEvent(QCloseEvent *event);

对话框和主窗口调用关系通过parentwidget(),这样在对话框就可以获取到主窗口了。这个思想是vs的思想,其实还可以通过信号槽机制,实现对话框和主窗口的互动。

主要窗口类

QObject

QWidget     QWindow

QDialog  QMainWindow  QSplashscreen  QMdisubWindow QDesktopWidget

QWidget     是第三层所有的基类包括QDialog  QMainWindow

常用的函数

1.void setAttribute(Qt::WidgetAttribute, bool on = true);

WA_DeleteOnClose = 55,  //窗口关闭删除自己,释放内存
WA_AcceptDrops = 78, //允许窗口接收拖放来的组件

2.void setWindowFlags(Qt::WindowFlags type);

WindowStaysOnTopHint = 0x00040000, //窗口现在在最上层

3.void setWindowState(Qt::WindowStates state);

WindowFullScreen = 0x00000004,//满屏

4.void setWindowOpacity(qreal level);  //1-0之间  1表示完全不透明  0表示完全透明

MDI(多文档)应用程序

1.需要在主窗口工作区放置一个QMdiArea作为子窗口的容器,类似相当于tabwidget。需要在QMainWindow 中调用setcentralwidget。

2.QMdiArea重要的函数有

1.QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::WindowFlags());

2.QMdiSubWindow *currentSubWindow() const;

3. QMdiSubWindow *activeSubWindow() const;

4.QList<QMdiSubWindow *> subWindowList(WindowOrder order = CreationOrder) const;

5. void cascadeSubWindows();  //窗口级联

6.void closeActiveSubWindow();//窗口平铺

7.void setViewMode(ViewMode mode);       enum ViewMode { SubWindowView, TabbedView };

信号

Q_SIGNALS:
void subWindowActivated(QMdiSubWindow *);  //活动窗口切换时发射该信号

QSettings 注册表的信息读写
1. void setValue(const QString &key, const QVariant &value);
2. QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
 
QCryptographicHash 加密算法类QString QDlgLogin::encrypt(const QString &str){
//字符串MD5算法加密
QByteArray btArray;
btArray.append(str);//加入原始字符串
QCryptographicHash hash(QCryptographicHash::Md5);  //Md5加密算法
hash.addData(btArray);  //添加数据到加密哈希值
QByteArray resultArray =hash.result();  //返回最终的哈希值   QString md5 =resultArray.toHex();//转换为16进制字符串   return  md5;
}

splash 窗口:用于程序启动时的启动窗口,从QDialog继承过来。

contextMenuEvent:虚函数,用于右键弹出菜单。

widget.ui:如果使用ui,则会有窗体界面文件,即如widget.ui,这个文件是自动生成的,存储窗体每个组件的属性设置和布局。其实就是一个xml文件。

ui_widget.h :是对widget.ui文件编译后自动生成的。出现在编译后的目录下。是一个与ui文件widget.ui对应的类定义文件。

会在类的头文件自动定义一个指针 Ui::Widget *ui;   后面访问控件都是通过指针ui.   所以构造函数会有ui->setupui(this);    析构函数有:delete ui;

qt 界面控件布局相关推荐

  1. 解决使用高分辨率笔记本分辨率放大100%以上运行程序界面控件不跟随方大方式qt+gtk+ui

    一.前言 解决使用高分辨率笔记本分辨率放大100%以上运行程序界面控件不跟随方大方式.使用100%时,qt界面太小,瞅着累眼睛,方大了界面,程序编译出来控件都跟着方大,布局都乱了,但是牺牲了qt cr ...

  2. qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...

  3. Qt界面优化:Qt窗体控件设置

    Qt界面优化:Qt窗体控件设置 文章目录 Qt界面优化:Qt窗体控件设置 一.效果图 1.鼠标移动点击效果 2. Qt托盘效果 二.使用步骤 1. 背景图片的添加 2. 控件样式的更改 3. Qt窗体 ...

  4. 学习《GUI Qt4 编程》笔记-02-代码实现控件布局-设计师控件布局

      对话框,之所以被成为对话框,是因为它们为用户和应用程序之间提供了一种可以相互"交谈"的交互方式.   绝大多数的图形用户界面应用程序都带有一个有菜单栏.工具栏构成的主窗口以及几 ...

  5. PyQt高级界面控件及操作

    PyQt高级界面控件 一.表格与树结构 1.表格 1.代码示例 2.代码解析: 3.补充说明属性参数 2.树结构 1.自定义树结构 2.系统定制模式 二.QStackedWidget组件 三.QTab ...

  6. Qt常用控件介绍(一)

    Qt常用控件介绍 Qt Creator 的使用技巧 Qt Creator的常用快捷键 按钮 QPushButton QToolButton QRadioButton QCheckBox QComman ...

  7. Qt编写控件属性设计器10-导出xml

    一.前言 能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控 ...

  8. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    http://www.cnblogs.com/wuhuacong/p/3317223.html 在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的 ...

  9. android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)

    菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单 选项菜单(Option ...

  10. Android常见界面控件(基础入门)

    Android本意指"机器人",Google公司将Android的标识设计为一个绿色机器人, 表示Android系统符合环保概念,是一个轻薄短小,功能强大的移动系统,是第一个真正为 ...

最新文章

  1. 【C++】C/C++ 中default/delete特性
  2. Qt中的 Size Hints 和 Size Policies
  3. zabbix 之 orabbix安装指导
  4. lamp下mysql安全加固
  5. 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...
  6. Python sorted 和 sort() 的区别
  7. 多晶硅价格单猛涨11% 光伏产业有望量价齐升
  8. php管理员登录文件,快速的事情,只有管理员,PHP才能访问文件
  9. wxWidgets:wxCloseEvent类用法
  10. tensorflow官方文档_Tensorflow 2.0 Preview 官方文档
  11. MongoDB复制集技术
  12. 跨域获取后台数据undefined_同源策略amp;JSONP跨域
  13. EmbossMaskFilter BlurMaskFilter 学习
  14. uCOS-II的学习笔记(共九期)和例子(共六个)
  15. emd经验模态分解 matlab,经验模态分解(EMD)在地球物理资料中的应用(附MATLAB程序)...
  16. 提供一套基于SpringBoot-shiro-vue的权限管理思路.
  17. WSUS环境下客户端常用命令
  18. Coloring Torus(Atcoder Grand Contest 030 C)
  19. VC+API模拟键盘按键(详解篇)
  20. 放大器输入级的差动放大 + 电流镜

热门文章

  1. 对java中路径的一些理解
  2. 白盒测试实践作业进度报告——Day 3
  3. 大数据与云计算学习:数据分析(一)
  4. 4、elasticsearch安装head插件
  5. Debian系统关闭iptables的conntrack跟踪
  6. LVS 实现负载均衡
  7. 用C语言统计给定文本文件中汉字的个数
  8. 云存储市场上演“新三国演义”
  9. JMF实现对USB视频数据捕捉和应用
  10. 说说封杀BT的几个理由