qt 界面控件布局

在 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.在单元格里加入控件:
setCellWidget

6.设置行高、列宽
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;

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页