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

C++ for QWidget:类(1)

QFile类

QFile是Qt框架中的一个类,用于对文件进行读取和写入操作。以下是对QFile的详细介绍:

一、基本原理

  1. 继承关系‌:QFile类继承自QFileDevice类,而QFileDevice类又继承自QIODevice类。这使得QFile拥有了QIODevice类的所有基本I/O功能。

  2. 文件访问模式‌:QFile提供了一种方便的方式来处理文件的操作,包括创建、打开、读取、写入、修改和关闭文件。默认情况下,QFile假定为二进制模式,即不对存储在文件中的字节执行任何转换。

二、主要功能

  1. 文件读取‌:使用QFile可以打开文件并从中读取数据。可以使用QFile的read()、readAll()或readLine()等函数来读取文件内容,并根据需要进行解析或处理。
  2. 文件写入‌:使用QFile可以创建或打开文件,并将数据写入其中。可以使用QFile的write()函数将数据写入文件,例如保存应用程序的配置或输出结果到文件中。
  3. 文件拷贝和移动‌:QFile提供了拷贝和移动文件的功能。可以使用QFile的copy()函数将文件从一个位置复制到另一个位置,或使用rename()函数(在Qt6中已被moveTo()替代)将文件从一个位置移动到另一个位置。
  4. 文件属性和信息‌:QFile类还提供了访问文件属性和信息的功能。可以使用QFile的size()函数获取文件的大小,permissions()函数获取文件的权限,以及其他函数获取文件的创建时间、修改时间等信息。
  5. 文件检查和存在性判断‌:QFile允许检查文件是否存在,并根据需要执行相应的操作。可以使用QFile的exists()函数检查文件是否存在,并根据返回值来处理文件的存在与否。

 三、使用示例

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QFile file("example.txt");if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) {qDebug() << "文件打开失败";return -1;}QTextStream stream(&file);stream << "Hello World!" << Qt::endl;stream << 43 << Qt::endl;stream << 3.14 << Qt::endl;    // 写入文件file.seek(0);    // 将文件指针移动到文件开头QString line;while (!stream.atEnd()) {line = stream.readLine();qDebug() << line;}    // 读取文件file.close();return a.exec();
}

QTextStream类

QTextStream是Qt框架中用于读写文本的类,它提供了一种方便的方式来处理文本数据的输入和输出。以下是对QTextStream的详细介绍:

一、基本原理

QTextStream可以与多种数据流一起使用,比如文件、字符串、标准输入输出(stdout)和标准错误输出(stderr)等。它类似于C++中的std::ostream和std::istream,但提供了更多针对Qt应用程序的功能,特别是自动处理不同操作系统的换行符差异(比如Windows使用\r\n而Unix/Linux使用\n)。

二、主要功能

  1. 文本读写‌:QTextStream的主要作用是简化文本数据的读写操作。可以使用它的各种方法来读取和写入不同类型的数据,如字符串、整数、浮点数等。
  2. 自动换行‌:QTextStream在读写操作中自动处理换行符,这使得跨平台的文本处理变得简单。
  3. 编码转换‌:QTextStream可以处理不同编码的文本数据,包括Unicode、UTF-8、Latin-1等。
  4. 格式化输出‌:QTextStream支持格式化输出,可以很容易地将数据格式化为字符串。例如,可以设置浮点数的精度,设置字段分隔符,以及设置数值的基数(如十六进制、八进制等)。
  5. 流操作符‌:QTextStream支持流操作符,如<<和>>,用于输入输出变量的值。

三、使用示例

#include <QFile>
#include <QTextStream>
#include <QDebug>int main() {QFile file("example.txt");if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {//先打开文件再写入QTextStream out(&file);//创建QTextStream对象out并绑定到QFile对象fileout << "Hello, World!" << Qt::endl;out << 42 << Qt::endl;out << 3.14159 << Qt::endl;file.close();} else {qDebug() << "无法打开文件用于写入";}file.setFileName("example.txt");if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);QString line;while (!in.atEnd()) {line = in.readLine();qDebug() << line;}//使用atEnd判断文件流是否到了结尾file.close();//关闭文件} else {qDebug() << "无法打开文件用于读取";}return 0;
}

QGridLayout类

QGridLayout是Qt框架中一个非常重要的布局管理器类,以下是对QGridLayout的详细介绍:

一、基本原理

QGridLayout是Qt框架中的一个布局管理器类,用于将子部件按照网格方式排列。它是QLayout类的子类,因此继承了QLayout类的所有布局管理功能,并在此基础上提供了网格布局的特性。QGridLayout将界面划分为若干“行”和“列”,可以指定每个控件放在哪个位置(第几行、第几列),并可以设置控件跨越的行数和列数。

二、主要功能

  1. 网格布局‌:QGridLayout将子部件按照网格形式排列,每个子部件占据一个单元格。可以根据需要指定行数和列数,以决定网格的大小和布局。
  2. 添加子部件‌:通过调用QGridLayout的addWidget()函数,可以向布局中添加子部件。可以指定子部件要放置在网格的哪一行和列上,并可以跨越多个行或列。
  3. 对齐方式‌:QGridLayout允许独立控制每个控件的对齐方向(如左对齐、居中等)。可以使用setAlignment()函数或addWidget()函数的alignment参数来设置子部件在网格单元格内的对齐方式。

    例如:addWidget(button3, 1, 0, 1, 2);

    这里,addWidget() 函数的参数具体含义如下:

    button3:这是要添加到布局中的控件,即一个按钮。

    1:这是控件要放置的行号。在这个例子中,button3 将被放置在第二行(因为行号是从0开始计数的)。

    0:这是控件要放置的列号。在这个例子中,button3 将被放置在第一列。

    1:这是控件要跨越的行数。在这个例子中,button3 将只占据一行。

    2:这是控件要跨越的列数。在这个例子中,button3 将跨越两列。

    因此,这行代码的作用是将 button3 添加到 QGridLayout 布局的第二行第一列的位置,并且让 button3 跨越两列。

  4. 弹性空间‌:QGridLayout支持弹性空间的概念。通过在网格中的行或列上添加弹性空间(使用setRowStretch()和setColumnStretch()函数),可以实现在布局中分配额外的空间或者平均分配剩余空间。
  5. 跨越多个单元格‌:可以使用setSpan()函数或addWidget()函数的rowSpan和columnSpan参数将子部件跨越多个网格单元格。这对于需要占据多个单元格的大型部件或自定义布局非常有用。
  6. 嵌套布局‌:QGridLayout可以与其他布局管理器一起使用,以实现更复杂的布局。可以将QGridLayout嵌套在其他布局管理器中,或者将其他布局管理器嵌套在QGridLayout中,以实现各种布局组合。

三、使用示例

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QGridLayout>class MyApp : public QWidget {
public:MyApp(QWidget *parent = nullptr) : QWidget(parent) {// 创建按钮QPushButton *button1 = new QPushButton("按钮1", this);QPushButton *button2 = new QPushButton("按钮2", this);QPushButton *button3 = new QPushButton("按钮3", this);QPushButton *button4 = new QPushButton("按钮4", this);// 创建布局管理器QGridLayout *layout = new QGridLayout(this);// 将按钮添加到布局中layout->addWidget(button1, 0, 0);layout->addWidget(button2, 0, 1);layout->addWidget(button3, 1, 0);layout->addWidget(button4, 1, 1);// 设置布局到窗口界面中this->setLayout(layout);// 设置窗口标题和大小this->setWindowTitle("QGridLayout Example");this->setGeometry(0, 0, 300, 200);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyApp window;window.show();return app.exec();
}

QString类

QString 是 Qt 框架中的一个核心类,用于表示和操作字符串。它是 Qt 对标准 C++ 字符串类的一个扩展,提供了更多方便的功能和更好的与 Qt 框架其他部分的集成。

主要功能

  1. 字符串操作‌:

    • append()prepend():在字符串的末尾或开头添加内容。
    • arg():用于字符串格式化,可以替换占位符为指定的值。
    • contains():检查字符串是否包含某个子串。
    • endsWith()startsWith():检查字符串是否以指定的子串开头或结尾。
    • indexOf()lastIndexOf():返回子串在字符串中第一次或最后一次出现的索引。
    • left()right():返回字符串的左部分或右部分。
    • mid():返回字符串中的一个子串。
    • replace():替换字符串中的某个子串为另一个子串。
    • simplified()trimmed():去除字符串两端的空白字符或所有空白字符。
    • split():split方法用于将一个QString对象根据指定的分隔符进行分割,返回一个QStringList对象,其中包含原始字符串中所有使用分隔符分隔的子字符串。

      语法

      QStringList QString::split(const QString &separator, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const;

      separator:指定分隔符,它可以是一个字符、一个字符串或者一个正则表达式。

      behavior:指定分割时的行为,是否保留空元素。它有两个取值:Qt::KeepEmptyParts:保留空白子串(默认)。Qt::SkipEmptyParts:不保留空白子串。

      返回值

      返回一个QStringList对象,该对象包含了分隔后的多个子串。

      示例代码
      QString str1 = "hello,world";QStringList list1 = str1.split(","); // 使用逗号作为分隔符qDebug() << "List1:" << list1; // 输出: List1: ("hello", "world"),此时list1的第一个元素是hello,第二个元素是worldQString str2 = "11,22,33,44";QStringList list2 = str2.split(",", Qt::SkipEmptyParts); // 使用逗号作为分隔符,并跳过空元素qDebug() << "List2:" << list2; // 输出: List2: ("11", "22", "33", "44")QString str3 = "apple,orange,banana&grape";QStringList list3 = str3.split(QRegExp("[,&]")); // 使用正则表达式作为分隔符qDebug() << "List3:" << list3; // 输出: List3: ("apple", "orange", "banana", "grape")

  2. 字符串转换‌:

    • toInt()toDouble()toFloat()等:将字符串转换为整数、浮点数等数值类型。
    • fromStdString()toStdString():与标准 C++ 字符串进行转换。
    • fromLatin1()toLatin1():与 Latin-1 编码的字符串进行转换。
    • fromUtf8()toUtf8():与 UTF-8 编码的字符串进行转换。
  3. 比较和哈希‌:

    • operator==operator!=operator<等:用于比较两个 QString 对象。
    • qHash():为 QString 对象生成哈希值,通常用于在哈希表中存储字符串。
  4. 非成员函数‌:

    • operator+:连接两个 QString 对象。
    • qPrintable():返回一个指向 QString 内部数据的指针,可以用于 printf 风格的函数。

使用示例

QStringList类

QStringList 是 Qt 框架中的一个非常实用的类,它继承自 QList<QString>,专门用于存储和操作字符串列表。QStringList 提供了一系列方便的方法来添加、移除、查找和排序字符串,使得处理字符串列表变得更加简单和高效。

主要功能

  1. 添加和移除字符串‌:

    • append():在列表末尾添加一个字符串。
    • prepend():在列表开头添加一个字符串。
    • removeAll():移除列表中所有匹配的字符串。
    • removeAt():根据索引移除一个字符串。
    • replaceInStrings():替换列表中所有字符串中的某个子串。
  2. 查找字符串‌:

    • contains():检查列表中是否包含某个字符串。
    • indexOf():返回某个字符串在列表中的索引,如果不存在则返回-1。
    • lastIndexOf():返回某个字符串在列表中最后一次出现的索引。
  3. 字符串操作‌:

    • join():将列表中的所有字符串连接成一个单一的字符串,可以使用指定的分隔符。
    • filter():根据指定的字符串模式过滤列表中的字符串。
    • sort():对列表中的字符串进行排序。
  4. 迭代和访问‌:

    • 可以使用标准的迭代方法(如foreach循环)来遍历QStringList中的字符串。
    • 也可以使用at()first()last()等方法来访问特定的字符串。

使用示例

#include <QStringList>
#include <QDebug>int main() {QStringList list;list.append("apple");list.append("banana");list.prepend("orange");qDebug() << "List after appending and prepending:" << list;list.removeAll("banana");qDebug() << "List after removing 'banana':" << list;int index = list.indexOf("apple");if (index != -1) {qDebug() << "'apple' found at index:" << index;} else {qDebug() << "'apple' not found";}QString joinedString = list.join(", ");qDebug() << "Joined string:" << joinedString;return 0;
}

注意

1、QStringList 是基于模板类 QList<QString> 的,因此它继承了 QList 的所有功能,但专门用于处理 QString 对象。

2、QStringList 并不是一个可以直接使用 new 关键字实例化的类;实际上,它是 QList<QString> 的一个类型别名。QStringList* m_answerList = new QList<QString>(this);不行但QStringList* m_answerList = new QList<QString>();可以。

QTextEdit类

QTextEdit是Qt框架中提供的一个功能丰富的文本编辑控件,它支持富文本的编辑和显示,广泛应用于各种需要文本处理的应用程序中。以下是对QTextEdit的详细介绍:

一、主要功能和特点

  1. 富文本编辑与显示‌:QTextEdit支持富文本格式,可以显示和编辑带有各种字体、颜色和文字格式的文本。它还可以处理图像、列表、表格和超链接等复杂内容,使得文本编辑更加灵活多样。
  2. 处理大型文档‌:QTextEdit经过优化,可以处理大型文档并快速响应用户输入,适用于编辑长篇文章或大量文本。
  3. HTML和Markdown支持‌:QTextEdit支持使用HTML风格的标签或Markdown格式的富文本格式化,方便用户以不同的方式编辑和显示文本内容。
  4. 段落和字符级别控制‌:QTextEdit文本是基于段落和字符进行控制的,每个段落和字符都可以有自己的格式属性,如字体、颜色、对齐方式等。
  5. 提供占位文本提示‌:QTextEdit支持设置占位文本,当编辑框内无内容时,可以显示预设的提示信息,引导用户输入。

二、常用方法和操作

  1. 文本内容操作‌:

    • setText(const QString &text):设置QTextEdit控件的文本内容。
    • append(const QString &text):在QTextEdit控件的文本末尾追加内容。
    • toPlainText():获取QTextEdit控件中的纯文本内容。
    • toHtml():获取QTextEdit控件中的HTML内容。
  2. 格式设置‌:

    • setFontFamily(const QString &family):设置文本的字体。
    • setFontPointSize(qreal size):设置文本的字号。
    • setTextColor(const QColor &color):设置文本的颜色。
    • setCurrentCharFormat(const QTextCharFormat &format):设置当前插入位置的文本格式。
    • setTextCursor(const QTextCursor &cursor):设置QTextEdit控件的文本光标。
  3. 光标操作‌:

    • 通过QTextCursor对象可以精细控制文本的插入、选择和格式。例如,可以使用QTextCursor的insertText()removeSelectedText()等方法来插入或删除文本。
    • 可以使用QTextCursor的movePosition()select()等方法来选择文本。
  4. 滚动与换行‌:

    • QTextEdit支持自动换行,可以根据编辑区域的大小自动调整文本的行数。
    • 可以通过滚动条控制文本的显示位置,方便用户查看文本的不同部分。
  5. 访问权限
    • 使用setReadOnly()设置是否只读,setReadOnly(true)设置为只读

三、注意事项

  1. QPlainTextEdit与QTextEdit的区别‌:QPlainTextEdit支持纯文本格式,而QTextEdit支持富文本格式。如果只需要显示和编辑纯文本,推荐使用QPlainTextEdit,因为它更轻量级和更快速。如果需要支持富文本格式,则应使用QTextEdit。
  2. 文本格式化‌:在格式化文本时,应该注意文本的样式是否需要跨行或跨段落。如果是,应该使用QTextBlockFormat或QTextListFormat,而不是QTextCharFormat。QTextBlockFormat可以设置段落的缩进、对齐方式和行间距等属性,而QTextListFormat可以设置带有序或无序列表的段落属性。
  3. 信号和槽‌:QTextEdit提供了丰富的信号和槽机制,用于处理用户的输入和操作。例如,可以使用textChanged()信号来监测文本内容的变化,使用cursorPositionChanged()信号来监测光标位置的变化等。

 QLabel类

QLabel是Qt框架以及PyQt5中用于显示文本或图像的基础控件。以下是对QLabel的详细介绍:

一、主要功能

QLabel能够展示纯文本、富文本(HTML格式)、图像以及GIF动画,是界面设计中展示静态信息的核心组件,其灵活性和可定制性都很高。

二、文本展示

  • QLabel支持普通文本的显示,常被用于标题、标签、说明文字等静态文本信息的展示。
  • 富文本显示功能允许使用HTML标签进行文本渲染,为文本内容增添更多样式和表现力,如设置字体、颜色、背景色,以及实现文本的加粗、斜体、下划线等效果。
  • 自动换行功能能够避免文本内容过长时被截断,提升用户阅读体验。

三、图像展示

  • QLabel支持多种常见图像格式(如PNG、JPEG)的显示。
  • 灵活的图像缩放功能可根据需求调整图像大小以适应标签尺寸,同时保持图像的宽高比,防止图像变形。

四、交互功能

  • QLabel支持嵌入超链接并监听点击事件,用户点击超链接时,可触发相应的信号和槽函数,实现页面跳转或其他操作。若希望QLabel能够打开外部链接,需设置setOpenExternalLinks(true)
  • QLabel还能与输入控件(如QLineEdit)建立伙伴关系,通过快捷键快速定位焦点。例如,在文本中使用&符号定义快捷键(如“&Name:”对应快捷键Alt+N)。

五、动态内容更新

  • QLabel支持显示实时数据,如计时器更新的时间等。通过定时器或信号槽机制,可实现QLabel内容的动态更新。

六、外观定制

  • QLabel提供丰富的外观定制选项,如边框样式、背景颜色等。可使用QPalette和QStyleSheet等类来设置QLabel的外观样式。

七、使用方法

QLabel类提供一系列接口用于设置和获取控件属性,以及处理相关操作和事件。以下是一些常用方法:

  • setText(text: str):设置QLabel的文本内容。
  • text() -> str:获取QLabel的当前文本内容。
  • setPixmap(pixmap: QPixmap):设置QLabel显示的图像。
  • setAlignment(alignment: Qt.Alignment):设置文本在QLabel中的对齐方式。
  • setFont(font: QFont):设置QLabel的字体。
  • setStyleSheet(styleSheet: str):设置QLabel的样式表。
  • setWordWrap(enabled: bool):设置是否启用文本自动换行功能。
  • setToolTip(toolTip: str):设置QLabel的提示文本。
  • setSizePolicy(horizontal: QSizePolicy.Policy, vertical: QSizePolicy.Policy):设置QLabel的大小策略。

下面的代码创建了一个QLabel类的数组并从1到10设置Text属性,最后按顺序添加到布局 

QLabel *m_titleLabels[10];
for(int i=0;i<10;i++){m_titleLabels[i]=new QLabel(this);m_titleLabels[i]->setText("第"+QString::number(i+1)+"题");m_layout->addWidget(m_titleLabels[i],1,i);}

QRadioButton类

QRadioButton是Qt框架及PyQt中用于提供单选按钮功能的控件。以下是对QRadioButton的详细介绍:

一、主要功能

QRadioButton允许用户在一组选项中选择一个。它通常与QButtonGroup一起使用,以确保同一组中的单选按钮互斥,即只能选中一个。

二、外观与行为

  • QRadioButton显示为一个圆形按钮,旁边附有文本标签,用于描述选项内容。
  • 当用户点击某个单选按钮时,该按钮会被选中,并且同一组中的其他单选按钮会自动取消选中状态。

三、常用方法

QRadioButton类提供了一系列接口用于设置和获取控件的属性,以及处理相关操作和事件。以下是一些常用方法:

  • setText(text: str):设置单选按钮的文本标签。
  • text() -> str:获取单选按钮的当前文本标签。
  • isChecked() -> bool:检查单选按钮是否被选中。
  • setChecked(checked: bool):设置单选按钮的选中状态。
  • toggle():切换单选按钮的选中状态。

四、信号与槽

QRadioButton发出toggled(bool)信号,当单选按钮的选中状态发生变化时,该信号被触发。你可以将此信号连接到槽函数,以便在选中状态改变时执行特定操作。

五、与QButtonGroup配合使用

QButtonGroup用于将多个QRadioButton组织在一起,以确保它们之间的互斥性。当你将QRadioButton添加到QButtonGroup中时,同一时间只能选中组中的一个单选按钮。

六、使用示例

#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QRadioButton>
#include <QButtonGroup>
#include <QLabel>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWidget window;window.setWindowTitle("QRadioButton Example");QVBoxLayout *layout = new QVBoxLayout(&window);QRadioButton *radio1 = new QRadioButton("Option 1");QRadioButton *radio2 = new QRadioButton("Option 2");QRadioButton *radio3 = new QRadioButton("Option 3");//创建3个按钮QButtonGroup *group = new QButtonGroup;group->addButton(radio1);group->addButton(radio2);group->addButton(radio3);//三个按钮加入按钮组QLabel *label = new QLabel("Selected: None");QObject::connect(group, &QButtonGroup::buttonClicked, [=](QAbstractButton *button){label->setText("Selected: " + button->text());});layout->addWidget(radio1);layout->addWidget(radio2);layout->addWidget(radio3);//三个按钮放入布局layout->addWidget(label);window.setLayout(layout);window.show();return app.exec();
}

QCheckBox类

QCheckBox是Qt框架及PyQt中用于创建复选框控件的类。以下是对QCheckBox的详细介绍:

一、主要特点

  • 多选功能‌:QCheckBox允许用户从多个选项中选择一个或多个选项,适用于需要多项选择的场景。
  • 状态切换‌:用户可以通过点击复选框来切换其状态,通常表示选中(被勾选)或未选中(未勾选)。
  • 支持三态‌:除了选中和未选中状态,QCheckBox还支持部分选中状态(即三态),这通常用于表示父子项之间的选择关系。但需要注意的是,三态模式默认是禁用的,需要手动调用setTristate(True)来启用。
  • 文本与图标‌:QCheckBox支持在复选框旁边显示文本或图标,以提供更直观的选项信息。
  • 信号与槽机制‌:QCheckBox提供了信号和槽机制,可以连接信号到槽函数,当用户更改复选框状态时执行特定操作。

二、常用方法

  • 状态控制‌:可以使用setChecked()函数设置复选框的选中状态,使用isChecked()函数判断复选框是否选中。
  • 显示内容‌:可以使用setText()函数设置复选框的文本内容,使用setIcon()函数设置复选框的图标。
  • 信号连接‌:可以使用connect()函数将复选框的信号(如stateChanged、clicked)连接到槽函数,以响应复选框的状态变化。

三、样式定制

QCheckBox的样式可以通过CSS(在Qt中称为QSS)进行修改。例如,可以设置复选框的文本颜色、背景颜色、边框、圆角等属性,还可以自定义未选中、选中、部分选中状态下的图标。此外,还可以通过子类化QCheckBox并重新实现其paintEvent方法来完全控制复选框的绘制过程,以实现更复杂的自定义外观。

QButtonGroup类

QButtonGroup是Qt框架及PyQt中用于管理多个按钮逻辑分组的类,它允许将多个按钮(如QRadioButton、QCheckBox或QPushButton)归为一组,并统一处理选中状态、信号和ID分配。以下是关于QButtonGroup的详细介绍:

一、主要特点

  1. 互斥选择‌:QButtonGroup可以确保同一时间只有一个按钮被选中(默认启用,适用于单选场景)。但也可以设置为非互斥,以允许同时选择多个按钮。
  2. 统一信号管理‌:通过组级信号处理所有按钮的点击、切换等事件,简化了事件处理逻辑。
  3. ID绑定‌:为每个按钮分配唯一ID,便于快速识别和处理。
  4. 动态增删按钮‌:支持运行时添加或移除按钮,并自动更新信号连接。

二、常用方法

  1. 创建与按钮操作‌:

    • 实例化QButtonGroup对象。
    • 使用addButton()方法将按钮添加到组中,并可选地分配ID。
  2. 互斥性与选中状态‌:

    • 使用setExclusive(bool)方法设置是否启用互斥选择。
    • 使用checkedButton()方法获取当前选中的按钮。
      m_btnGroups[8]->checkedButton()->text() == m_answerList.at(i)
      整行代码的意思是:检查m_btnGroups[8]中被选中的按钮的文本是否与m_answerList中索引为i的元素相同
    • 使用checkedId()方法获取当前选中按钮的ID。
  3. ID管理‌:

    • 使用button()方法通过ID获取按钮对象。
    • 使用buttons()方法获取组中所有按钮的列表。
  4. 其他操作‌:

    • 支持连接信号(如buttonClicked、buttonPressed、buttonReleased)到槽函数,以处理按钮事件。

三、信号与槽

QButtonGroup可以发出多种信号,如buttonClicked()、buttonPressed()和buttonReleased()等。这些信号可以在按钮被点击、按下或释放时触发。通过连接这些信号到自定义的槽函数,可以处理按钮的点击事件。

QTimer类

QTimer是Qt框架及PyQt中用于定时操作的类,它提供了一种方便的方式来定期或延时触发某些操作。以下是对QTimer的详细介绍:

一、主要特点

  1. 定时功能‌:QTimer能够在指定的时间间隔后触发特定的操作,支持单次定时和周期定时两种模式。
  2. 信号与槽机制‌:通过Qt的信号与槽机制,QTimer可以在定时事件发生时发出信号,并连接到相应的槽函数以执行特定操作。
  3. 高精度‌:QTimer的精确度依赖于底层的操作系统和硬件,但大多数平台支持较高的精确度,如20毫秒。
  4. 易于使用‌:QTimer的使用相对简单,只需创建对象、设置时间间隔、连接信号与槽,然后启动定时器即可。

二、常用方法

  1. 创建与启动‌:

    • 使用new QTimer()创建一个QTimer对象。
    • 使用setInterval(int msec)设置定时器的时间间隔。
    • 使用start(int msec, bool sshot = FALSE)启动定时器。如果sshot为真,则定时器为单次触发;否则为周期触发。
  2. 停止与删除‌:

    • 使用stop()方法停止定时器。
    • 如果不再需要QTimer对象,可以使用delete关键字删除它。但在Qt中,通常不需要手动删除QTimer对象,因为它的父对象被销毁时,它也会被自动销毁。
  3. 判断状态‌:

    • 使用isActive()方法判断定时器当前是否在运行。
  4. 单次定时操作‌:

    • 可以使用静态的singleShot(int msec, QObject* receiver, const char* member)函数来创建一个单次触发的定时器。这个函数在一个给定时间间隔后调用一个槽,无需创建本地的QTimer对象。
QTimer::singleShot(1,qApp,SLOT(quit()));

这段代码第一个参数是延时,这里设置为0毫秒,第二个参数是接收者对象,这里使用qApp宏来引用当前的应用程序对象(QApplication的实例),第三个参数是要调用的槽函数,这里使用SLOT(quit())来指定QApplication类的quit()槽函数,quit()槽函数用于退出应用程序的事件循环,导致应用程序停止运行。

三、信号

  • timeout()‌:当定时器超时时发出的信号。可以将其连接到槽函数,以执行定时任务。
http://www.xdnf.cn/news/8804.html

相关文章:

  • 22、web场景-web开发简介
  • Java 内部类
  • Php JIT 使用详解
  • 慢查询日志的开启与分析:优化SQL性能的实战指南
  • 审计报告附注救星!实现Word表格纵向求和+横向计算及其对应的智能校验
  • rt-linux里的泛rtmutex锁的调用链整体分析
  • clickhouse-1-特性及docker化安装
  • C语言指针进阶
  • 互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案
  • 向量数据库选型实战指南:Milvus架构深度解析与技术对比
  • OPENEULER搭建私有云存储服务器
  • 使用 Python 库中自带的数据集来实现上述 50 个数据分析和数据可视化程序的示例代码
  • Go 语言基础1 Slice,map,string
  • 在PyCharm中使用pyenv指定的Python:配置指南
  • 机器学习--分类算法
  • xml双引号可以不转义
  • 【python实战】中国主要城市经济统计数据分析与预测
  • 力扣395做题笔记
  • 深度学习论文idea:多模态检索
  • 计算机网络总结(物理层,链路层)
  • 【深度学习】2. 从梯度推导到优化策略:反向传播与 SGD, Mini SGD
  • 最好用的wordpress外贸主题
  • 【概率论基本概念02】最大似然性
  • 正则表达式:字符串模式匹配的利器
  • Bochs下去运行linux-0.11
  • 云原生安全基石:深度解析HTTPS协议(从原理到实战)
  • 图论核心:深度搜索DFS 与广度搜索BFS
  • 【React】createPortal - 简单的Message和Modal组件
  • JAVA集合(含List、Map、Set)(超详细版)
  • 阿里云国际版香港轻量云服务器:CN2 GIA加持,征服海外网络的“速度与激情”!