Qt基础教程之自定义对话框及调用方法
qt 函数的定义与调用

qt 函数的定义与调用一、概述在使用 Qt 开发桌面应用程序时,函数的定义与调用是一个非常重要的内容。
函数的定义决定了函数的行为和功能,而函数的调用则是实际使用函数的过程。
在本文中,我们将深入探讨 qt 函数的定义与调用,以帮助读者理解函数的基本概念以及如何在 Qt 中使用函数。
二、函数的定义函数是一组用于执行特定任务的代码块,通过函数可以将代码分割为模块化的部分,方便开发、维护和重用。
在 Qt 中,函数的定义由函数头和函数体组成。
2.1 函数头函数头包括函数的返回类型、函数名和函数参数。
返回类型指定函数的返回值类型,函数名是函数的唯一标识符,函数参数是传递给函数的值或变量。
返回类型函数名(参数列表)2.2 函数体函数体是函数的实际执行代码,用于定义函数的具体行为和逻辑。
函数体由一对花括号括起来,在花括号内部编写函数的代码。
{// 函数体代码}以下是一个示例函数的定义:int add(int a, int b){return a + b;}三、函数的调用函数的调用是指使用函数完成特定任务的过程。
在 Qt 中,函数可以通过函数名加上参数列表的方式进行调用。
调用函数时,传入的参数必须与函数定义中的参数类型和顺序一致。
函数名(参数列表);以下是一个调用函数的示例:int result = add(2, 3);四、函数的命名规范在定义和调用函数时,我们应该遵循一些规范来提高代码的可读性和可维护性。
4.1 函数名函数名应该具有描述性,能够清晰表达函数的功能。
通常使用驼峰命名法或下划线命名法来命名函数,确保函数名的可读性。
以下是一些常见的函数命名示例:•驼峰命名法:calculateTotal、getUserName•下划线命名法:calculate_total、get_user_name4.2 参数名参数名应该具有描述性,能够清晰表达参数的含义。
与函数名类似,我们也可以使用驼峰命名法或下划线命名法来命名参数,以提高代码的可读性。
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例

QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例为了实现添加按钮点击弹出信息提示框的功能,我们可以使用Qt来创建一个窗口控制程序。
首先,我们需要创建一个Qt窗口应用程序项目。
在Qt Creator中选择"新建项目",然后选择"C++"和"Qt Widgets应用",填写项目名称和路径,然后点击"下一步"。
在下一个界面,可以选择使用预设的窗口模板。
选择一个适合的窗口模板,例如"MainWindow",然后点击"下一步"。
接下来,在"项目管理器"中,展开源文件夹,找到"mainwindow.cpp"文件。
双击打开该文件。
在"mainwindow.cpp"文件中,我们需要添加按钮和相应的点击事件。
如果不存在"MainWindow"类的构造函数,则需要手动创建构造函数。
我们可以在构造函数中添加按钮。
```cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)ui->setupUi(this);//创建按钮QPushButton *btn = new QPushButton("添加按钮", this);btn->setGeometry(100, 100, 100, 30);//连接按钮的点击事件到槽函数connect(btn, SIGNAL(clicked(), this, SLOT(showMessageBox());MainWindow::~MainWindowdelete ui;//槽函数:点击按钮弹出信息提示框void MainWindow::showMessageBoxQMessageBox::information(this, "提示", "按钮已点击");```在上面的代码中,我们首先在构造函数中创建了一个按钮,并设置了按钮的位置和尺寸。
Qt基础教程之QStandardItemModel用法

本节介绍 QStandardltemModel 的使用,主要用到以下 3 个类:1.QStandardItemModel:基于项数据的标准数据模型,可以处理二维数据。
维护一个二维的项数据数组,每个项是一个 QStandardltem 类的变量,用于存储项的数据、字体格式、对齐方式等。
2.QTableView:二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过 setModel() 函数设置一个 QStandardItemModel 类的数据模型之后,一个单元格显示 QStandardItemModel 数据模型中的一个项。
3.QItemSelectionModel:一个用于跟踪视图组件的单元格选择状态的类,当在QTableView 选择某个单元格,或多个单元格时,通过 QItemSelectionModel 可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。
这几个类之间的关系是:QTableView 是界面视图组件,其关联的数据模型是 QStandardItem Model,关联的项选择模型是 QItemSelectionModel,QStandardItemModel 的数据管理的基本单元是 QStandardItem。
实例中演示 QStandardItemModel 的使用,其运行时界面如图 1 所示。
图 1运行时界面该实例具有如下功能:•打开一个纯文本文件,该文件是规则的二维数据文件,通过字符串处理获取表头和各行各列的数据,导入到一个 QStandardItemModel 数据模型。
•编辑修改数据模型的数据,可以插入行、添加行、删除行,还可以在QTableView 视图组件中直接修改单元格的数据内容。
•可以设置数据模型中某个项的不同角色的数据,包括文字对齐方式、字体是否粗体等。
•通过 QItemSelectionModel 获取视图组件上的当前单元格,以及选择单元格的范围,对选择的单元格进行操作。
Qt5种标准对话框及使用方法详解(Dialog)

Qt5种标准对话框及使⽤⽅法详解(Dialog )引⽤⾃: (侵删);QT 为应⽤程序设计提供了⼀些常⽤的标准对话框,如打开⽂件对话框、选择颜⾊对话框、信息提⽰和确认选择对话框、标准输⼊对话框等,⽤户⽆需再⾃⼰设计这些常⽤的对话框,这样可以减少程序设计⼯作量。
在前⾯⼏章的实例中,或多或少地⽤到了其中的⼀些对话框。
Qt 预定义的各标准对话框的类,及其主要静态函数的功能见表 1(由于输⼊参数⼀般较多,省略了函数的输⼊参数,只列出了函数的返回值类型)。
表 1 Qt 预定义标准对话框对话框常⽤静态函数名称函数功能QFileDialog⽂件对话框QString getOpenFileName() QStringList getOpenFileNames()QString getSaveFileName() QString getExistingDirectory()QUrl getOpenFileUrl()选择打开⼀个⽂件 选择打开多个⽂件 选择保存⼀个⽂件 选择⼀个⼰有的⽬录选择打幵⼀个⽂件,可选择远程⽹络⽂件QcolorDialog 颜⾊对话框QColor getColor()选择颜⾊QFontDialog 字体对话框QFont getFont()选择字体QinputDialog 输⼊对话框QString getText() int getlnt() double getDouble()QString getltem()QString getMultiLineText()输⼊单⾏⽂字 输⼊整数 输⼊浮点数从⼀个下拉列表框中选择输⼊ 输⼊多⾏字符串QMessageBox 消息框StandardButton information() StandardButton question()StandardButton waming() StandardButton critical() void about()void aboutQt()信息提⽰对话框 询问并获取是否确认的对话框 警告信息提⽰对话框 错误信息提⽰对话框 设置⾃定义信息的关于对话框 关于Qt 的对话框实例 samp6_1 演⽰使⽤这些对话框,程序运⾏界⾯如图 2 所⽰。
Qt笔记之使用设计器自定义窗口标题栏

Qt笔记之使⽤设计器⾃定义窗⼝标题栏1.在窗⼝显⽰之前,设置WindowFlags为FramelessWindowHint,以产⽣⼀个没有边界的窗⼝例如Widget::Widget(QWidget *parent) :QWidget(parent, Qt::FramelessWindowHint), //在此设置WindowFlagsui(new Ui::Widget){ui->setupUi(this);//setWindowFlags(Qt::FramelessWindowHint); 或在构造函数体中设置}2.在设计器中,拖⼀个Widget到窗⼝上。
为⽅便描述,我命名此Widget为titleBarWidget将titleBarWidget的minimumSize->height改为30,以固定标题栏⾼度更改titleBarWidget的样式表为background-color: #12B7F5;再拖⼀个Vertical Spacer到窗⼝上,并设置窗⼝为竖直布局为去除标题栏边距,将layoutLeftMargin、layoutTopMargin和layoutRightMargin都设置为0效果如图3.为了能拖动标题栏移动窗⼝,我们定义⼀个类,如下TitleBarWidget.h#ifndef TITLEBARWIDGET_H#define TITLEBARWIDGET_H#include <QWidget>class TitleBarWidget : public QWidget{Q_OBJECTpublic:explicit TitleBarWidget(QWidget *parent = nullptr);protected:virtual void mousePressEvent(QMouseEvent *event);virtual void mouseMoveEvent(QMouseEvent *event);private:int differenceX, differenceY;};#endif// TITLEBARWIDGET_HTitleBarWidget.cpp#include "TitleBarWidget.h"#include <QMouseEvent>TitleBarWidget::TitleBarWidget(QWidget *parent) : QWidget(parent) { }void TitleBarWidget::mousePressEvent(QMouseEvent *event){QWidget *parentWidget = static_cast<QWidget *>(parent());differenceX = event->globalX() - parentWidget->x();differenceY = event->globalY() - parentWidget->y();}void TitleBarWidget::mouseMoveEvent(QMouseEvent *event){int x = event->globalX() - differenceX;int y = event->globalY() - differenceY;QWidget *parentWidget = static_cast<QWidget *>(parent());parentWidget->move(x, y);}将titleBarWidget提升为TitleBarWidget,就能实现拖动标题栏移动窗⼝了4.然⽽问题来了,titleBarWidget的样式表失效了为解决这个问题,需要重写QWidget中的paintEvent,代码如下void TitleBarWidget::paintEvent(QPaintEvent *event){Q_UNUSED(event)QStyleOption option;option.init(this);QStylePainter painter(this);painter.drawPrimitive(QStyle::PE_Widget, option);}。
QT学习笔记widgetMainWindow和Dialog的选择使用

Qt中的每个类,都有一个对应的同名头文件,其中包含其类定义。
例如要使用Q Appli catio n类,则需要在程序中添加" #includ e <QAppli catio n>"QAppli catio n类用于管理应用程序范围内的资源。
其构造函数需要main函数的ar gc和ar gv作为参数。
widget被创建时都是不可见的(always create d hidden)。
widget中可容纳其它widg et。
Qt中的wi dget在有用户行为或状态改变时会emi t signal。
signal可以和sl ot函数连接在一起(connec t),这样当有si gnal被emit时,对应的slo t函数会被自动调用。
QWidge t类的构造函数需要一个 QWidge t * 指针作为参数,表示其par ent widget(默认值为0,即不存在pa rentwidget)。
在paren t widget被删除时,Qt会自动删除其所有的child widget。
Qt中有三种Layou t Manage r 类: QHBoxL ayout,QVBoxL ayOut,QGridL ayOut。
基本模式是将widge t添加进L ayOut,由Layou t自动接管widge t的尺寸和位置。
启动Qt程序时可以通过 -style参数改变程序的默认显式风格。
Chapte r 2 Creati ng Dialog s2.1 Subcla ssing DialogQt中所有d ialog的基类是Q Dialo g。
QDialo g派生自Q Widge t。
Qt中所有定义了sig nal或s lot的类,在其类定义的开始处都要使用Q_O BJECT宏。
Qt基础教程之QComboBox下拉框及用法

QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。
QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。
实例演示 QComboBox(和 QPlainTextEdit,后续会讲)的使用,其运行时界面如图 1 所示。
图 1 实例 samp4_6 运行界面QComboBox 的用法设计时属性设置QComboBox 主要的功能是提供一个下拉列表供选择输入。
在界面上放置一个 QComboBox 组件后,双击此组件,可以出现如图 2 所示的对话框,对QComboBox 组件的下拉列表的项进行编辑。
在图 2 所示的对话框中,可以进行编辑,如添加、删除、上移、下移操作,还可以设置项的图标。
图 2 QComboBox 组件设计时的列表项编辑器用代码添加简单项窗口上的“初始化列表”按钮初始化下拉列表框的列表内容,其代码如下:void Widget::on_btnIniItems_clicked(){ //"初始化列表"按键QIcon icon;icon.addFile(":/images/icons/aim.ico");ui->comboBox->clear(); //清除列表for (int i=0;i<20;i++)ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //带图标//ui->comboBox->addItem(QString::asprintf("Item %d",i)); //不带图标}添加一个项时可以指定一个图标,图标来源于资源文件。
addItem() 用于添加一个列表项,如果只是添加字符串列表项,而且数据来源于一个 QStringList 变量,可以使用 addltems() 函数,示例代码如下:ui->comboBox->clear();QStringList strList;strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";ui->comboBox->addItems(strList);添加具有用户数据的项 QComboBox::addltem() 函数的两种参数的原型定义如下:不管是哪一个 addItem() 函数,后面都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据。
Qt基础教程之自定义对话框及调用方法

在一个应用程序设计中,为了实现一些特定的功能,必领设计自定义对话框。
自定义对话框的设计一般从 QDialog 继承,并且可以采用UI设计器可视化地设计对话框。
对话框的调用一般包括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获取对话框输入数据等过程。
本节将通过实例 samp6_2 来详细介绍这些原理。
图 1 是实例 samp6_2 的主窗口,及其设置表格行列数的对话框。
图 1 实例 samp6_2 主窗口及其设置表格行列数的对话框主窗口采用 QTableView 和 QStandardltemModel、QltemSelectionModel 构成一个通用的数据表格编辑器,设计了 3 个对话框,分别具有不同的功能,并且展示对话框不同调用方式的特点:•设置表格行列数对话框 QWDialogSize该对话框每次动态创建,以模态方式显示(必须关闭此对话框才可以返回主窗口操作),对话框关闭后获取返回值,用于设置主窗口的表格行数和列数,并且删除对话框对象,释放内存。
这种对话框创建和调用方式适用于比较简单,不需要从主窗口传递大量数据做初始化的对话框,调用后删除对话框对象可以节约内存。
•设置表头标题对话框 QWDialogHeaders图 2 是设置表格表头标题的对话框,该对话框在父窗口(本例中就是主窗口)存续期间只创建一次,创建时传递表格表头字符串列表给对话框,在对话框里编辑表头标题后,主窗口获取编辑之后的表头标题。
图 2 设置表格表头标题对话框注意,对话框以模态方式显示,关闭后只是隐藏,并不删除对象,下次再调用时只是打开己创建的对话框对象。
这种创建和调用方式适用于比较复杂的对话框,需要从父窗口传递大量数据做对话框初始化。
下次调用时不需要重复初始化,能提高对话框调用速度,但是会一直占用内存,直到父窗口删除时,对话框才从内存中删除。
•单元格定位与文字设置对话框QWDialogLocate图 3 是单元格定位和文字设置对话框,该对话框以非模态方式调用,显示对话框时还可以对主窗口进行操作,对话框只是浮动在窗口上方。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在一个应用程序设计中,为了实现一些特定的功能,必领设计自定义对话框。
自定义对话框的设计一般从 QDialog 继承,并且可以采用UI设计器可视化地设计对话框。
对话框的调用一般包括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获取对话框输入数据等过程。
本节将通过实例 samp6_2 来详细介绍这些原理。
图 1 是实例 samp6_2 的主窗口,及其设置表格行列数的对话框。
图 1 实例 samp6_2 主窗口及其设置表格行列数的对话框主窗口采用 QTableView 和 QStandardltemModel、QltemSelectionModel 构成一个通用的数据表格编辑器,设计了 3 个对话框,分别具有不同的功能,并且展示对话框不同调用方式的特点:•设置表格行列数对话框 QWDialogSize该对话框每次动态创建,以模态方式显示(必须关闭此对话框才可以返回主窗口操作),对话框关闭后获取返回值,用于设置主窗口的表格行数和列数,并且删除对话框对象,释放内存。
这种对话框创建和调用方式适用于比较简单,不需要从主窗口传递大量数据做初始化的对话框,调用后删除对话框对象可以节约内存。
•设置表头标题对话框 QWDialogHeaders图 2 是设置表格表头标题的对话框,该对话框在父窗口(本例中就是主窗口)存续期间只创建一次,创建时传递表格表头字符串列表给对话框,在对话框里编辑表头标题后,主窗口获取编辑之后的表头标题。
图 2 设置表格表头标题对话框注意,对话框以模态方式显示,关闭后只是隐藏,并不删除对象,下次再调用时只是打开己创建的对话框对象。
这种创建和调用方式适用于比较复杂的对话框,需要从父窗口传递大量数据做对话框初始化。
下次调用时不需要重复初始化,能提高对话框调用速度,但是会一直占用内存,直到父窗口删除时,对话框才从内存中删除。
•单元格定位与文字设置对话框QWDialogLocate图 3 是单元格定位和文字设置对话框,该对话框以非模态方式调用,显示对话框时还可以对主窗口进行操作,对话框只是浮动在窗口上方。
在对话框里可以定位主窗口表格的某个单元格并设置其文字内容,在主窗口上的表格中单击鼠标时,单元格的行号、列号也会更新在对话框中。
对话框关闭后将自动删除,释放内存。
图 3 浮动于主窗口上方的对话框,可交互操作这种对话框适用于主窗口与对话框需要交互操作的情况,例如用于查找和替换操作的对话框。
对话框 QWDialogSize 的创建和使用创建对话框QWDialogSize实例主窗口从 QMainWindow 继承,主窗口用一个 QTableView 组件作为界面中心组件,设计几个 Action 用于创建主工具栏按钮。
主窗口采用QStandardItemModel 作为数据模型,QItemSelectionModel 作为选择模型,界面和主窗口 Model/View 结构的设计前面已经讲过,本节不再详述。
在项目主窗口建立后,要创建如图 1 所示的设置表格行列数的对话框,单击Qt Creator 的菜单项 File->New File or Project,选择 Qt 类别下的“Qt Designer Form Class”,创建可视化设计的对话框类。
在随后出现的向导里,选择窗口模板为 Dialog without Buttons,并设置自定义对话框的类名。
设置创建的对话框类名称为 QWDialogSize,系统自动生成 qwdialogsize.h、qwdialogsize.cpp 和 qwdialogsize.ui 3 个文件。
QWDialogSize 对话框的界面设计在 UI 设计器里进行,放置界面组件并设置好布局。
对话框的调用和返回值设计 QWDialogSize 对话框的界面时,在上面放置了两个 QPushButton 按钮,并分别命名为 btnOK 和 btnCancel,分别是“确定”和“取消”按钮,用于获取对话框运行时用户的选择。
那么,如何获得用户操作的返回值呢?在信号与槽编辑器里,将 btnOK 的 clicked() 信号与对话框的 accept() 槽关联,将 btnCancel 的 clicked() 信号与对话框的reject()槽关联即可,如图 4 所示。
图 4 对话框设计时“确定”和“取消”按钮的信号与槽关联单击“确定”按钮会执行 accept() 槽(或在代码里调用 accept() 槽函数也是一样的),这会关闭对话框(默认情况下,对话框只是被隐藏,并不被删除),并返回 QDialog::Accepted 作为 exec() 函数的返回值。
单击“取消”按钮会执行 reject() 槽函数,也会关闭对话框,并返回QDialog::Rejected 作为 exec() 函数的返回值。
完成后的 QWDialogSize 的类完整定义如下:1.class QWDialogSize : public QDialog2.{3. Q_OBJECT4.public:5.explicit QWDialogSize(QWidget *parent = 0);6. ~QWDialogSize();7. int rowCount();//获取对话框输入的行数8. int columnCount();//获取对话框输入的列数9. void setRowColumn(int row, int column); //初始对话框上两个SpinBox的值10.private slots:11.private:12. Ui::QWDialogSize *ui;13.};在 QWDialogSize 的类定义中定义 3 个 public 函数,用于与对话框调用者的数据交互。
因为窗体上的组件都是私有成员,外界不能直接访问界面组件,只能通过接口函数访问。
下面是类的接口函数实现代码。
在析构函数中弹出一个消息提示对话框,以便观察对话框是何时被删除的。
1.QWDialogSize::~QWDialogSize、2.{3. QMessageBox::information (this,"提示","设置表格行列数对话框被删除"); delete ui;4.}5.6.int QWDialogSize::rowCount()7.{ //用于主窗口调用获得行数的输入值8.return ui->spinBoxRow->value();9.}10.11.int QWDialogSize::columnCount()12.{//用于主窗口调用获得列数的输入值13. return ui->spinBoxColumn->value();14.}15.16.void QWDialogSize::setRowColumn(int row, int column)17.{ //初始化数据显示18. ui->spinBoxRow->setValue(row);19. ui->spinBoxColumn->setValue(column);20.}下面是主窗口中的“设置行数列数”工具栏按钮的响应代码,用于创建、显示对话框,并读取对话框上设置的行数、列数。
1.void MainWindow::on_actTab_SetSize_triggered()2.{ //模态对话框,动态创建,用过后删除3. QWDialogSize *dlgTableSize=new QWDialogSize(this);4. Qt::WindowFlags flags=dlgTableSize->windowFlags();5. dlgTableSize->setWindowFlags(flags |Qt::MSWindowsFixedSizeDialogHint);6. dlgTableSize->setRowColumn(theModel->rowCount(),theModel->columnCount ());7. int ret=dlgTableSize->exec () ;// 以模态方式显示对话框8.if (ret==QDialog::Accepted)9. { //OK按钮被按下,获取对话框上的输入,设置行数和列数10. int cols=dlgTableSize->columnCount();11. theModel->setColumnCount(cols);12. int rows=dlgTableSize->rowCount();13. theModel->setRowCount(rows);14. }15. delete dlgTableSize;16.}从代码中可以看到,每次单击此工具栏按钮时,对话框都被重新创建。
创建后用 QDialog 的 setWindowFlags() 函数将对话框设置为固定大小,然后调用对话框的自定义函数 setRowColumn(),将主窗口数据模型 theModd 的现有的行数和列数显示到对话框上的两个 SpinBox 组件里。
调用对话框的 exec() 函数,以模态显示的方式显示对话框。
模态显示方式下,用户只能在对话框上操作,不能操作主窗口,主程序也在此处等待 exec() 函数的返回结果。
当用户单击“确定”按钮关闭对话框后,exec() 返回结果为QDialogxAccepted,主程序获得此返回结果后,通过对话框的自定义函数columnCount() 和 rowCount() 获得对话框上新输入的列数和行数,然后设置为数据模型的列数和行数。
最后使用 delete 删除创建的对话框对象,释放内存。
所以,关闭对话框时,会出现 QWDialogSize 析构函数里的消息提示对话框。
对话框QWDialogHeaders的创建和使用对话框的生存期对话框的生存期是指它从创建到删除的存续区间。
前面介绍的设置表格行数和列数的对话框的生存期只在调用它的按钮的槽函数里,因为对话框是动态创建的,调用结束后就会被删除。
而对于图 2 所示的设置表头标题对话框,我们希望在主窗口里首次调用时创建它,对话框关闭时并不删除,只是隐藏,下次调用时再次显示此对话框。
只有在主窗口释放时该对话框才释放,所以这个对话框的生存期在主窗口存续期间。
QWDialogHeaders的定义和实现设置表头标题的对话框类是 QWDialogHeaders,它也是从 QDialog 继承的可视对话框类。
其界面显示使用 QListView 组件,用 QStringListModel 变量管理字符串列表数据,构成 Model/View 结构。