【QT】常用控件-下
欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:QT
目录
- 👉🏻QComboBox
- 👉🏻 QSpinBox
- 👉🏻QDateTimeEdit
- 👉🏻QDial
- 👉🏻 QSlider
- 👉🏻QListWidget
- 👉🏻 QTableWidget
- 👉🏻 QTreeWidget
👉🏻QComboBox
QComboBox
是 Qt 框架中用于提供下拉列表选择的一个控件。它允许用户从预定义的选项中选择一个,并且这些选项可以包含文本和/或图标。QComboBox
提供了丰富的 API 来管理这些选项、响应用户交互以及自定义控件的行为。
🍎 常用方法
以下是一些 QComboBox
的常用方法:
- addItem(const QString &text, const QVariant &userData = QVariant()):向组合框中添加一个带有文本和可选用户数据的选项。
- addItems(const QStringList &texts):向组合框中添加多个选项,这些选项的文本由
QStringList
提供。 - removeItem(int index):根据索引移除组合框中的一个选项。
- clear():移除组合框中的所有选项。
- setCurrentIndex(int index):根据索引设置当前选中的选项。
- currentIndex():返回当前选中选项的索引。
- currentText():返回当前选中选项的文本。
- setCurrentText(const QString &text):设置当前选中的选项为具有指定文本的选项(如果存在)。
- setEditable(bool editable):设置组合框是否可编辑。如果设置为
true
,则用户可以输入不在列表中的新值。 - isEditable():返回组合框是否可编辑。
- setItemIcon(int index, const QIcon &icon):为指定索引的选项设置图标。
- itemIcon(int index):返回指定索引的选项的图标。
- setItemText(int index, const QString &text):为指定索引的选项设置文本。
- itemText(int index):返回指定索引的选项的文本。
🍎 代码使用示例
以下是一个简单的代码示例,展示了如何在 Qt 应用程序中使用 QComboBox
,包括添加选项、设置当前选项以及响应用户选择更改:
#include <QApplication>
#include <QWidget>
#include <QComboBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QDebug>class MainWindow : public QWidget {Q_OBJECT
public:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {// 布局QVBoxLayout *layout = new QVBoxLayout(this);// 创建 QLabelQLabel *label = new QLabel("请选择一个选项:", this);layout->addWidget(label);// 创建 QComboBoxQComboBox *comboBox = new QComboBox(this);comboBox->addItem("选项 1");comboBox->addItem("选项 2");comboBox->addItem("选项 3");// 连接到 currentIndexChanged 信号connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),this, &MainWindow::onComboBoxIndexChanged);// 添加到布局layout->addWidget(comboBox);// 设置初始选中项(可选)comboBox->setCurrentIndex(1); // 假设我们默认选中 "选项 2"}private slots:void onComboBoxIndexChanged(int index) {qDebug() << "当前选中的索引是:" << index<< ",文本是:" << comboBox->currentText();// 这里可以添加更多逻辑来处理用户的选择}private:// 注意:在这个简单的示例中,我们没有将 comboBox 声明为 MainWindow 的成员变量,// 但在实际应用中,为了能够在多个槽函数中访问它,你可能会想这样做。// QComboBox *comboBox; // 如果需要,可以声明为成员变量并在构造函数中初始化
};#include "main.moc" // 如果你不使用 qmake 或自动 moc,这行代码可能是不必要的int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow window;window.resize(300, 200);window.show();return app.exec();
}// 注意:上面的 #include "main.moc" 注释是出于说明目的。
// 在实际项目中,如果你的类定义在头文件中,并且你使用的是 qmake,
// 那么 qmake 会自动处理 moc(Meta-Object Compiler)的调用。
// 如果你不使用 qmake,或者你的类定义在源文件中,你可能需要手动运行 moc。
// 但是,对于简单的示例和测试,你通常不需要担心这个问题。
请注意,上面的示例中 QComboBox *comboBox;
被注释掉了,因为在这个特定的示例中,comboBox
是在构造函数中局部创建的,并且我们只在构造函数内部连接了信号和槽。然而,在实际
👉🏻 QSpinBox
QSpinBox
是 Qt 框架中的一个非常实用的控件,主要用于整数输入。它提供了一个带有上下箭头按钮的输入框,允许用户通过点击这些按钮来递增或递减整数值,同时也可以通过键盘直接输入数值。QSpinBox
适用于各种需要用户输入整数值的场景,如数量选择、数值设置等。
🍎 主要特点
- 整数输入:
QSpinBox
只能接收和显示整数,不支持浮点数。 - 范围限制:可以设置允许输入的最小值和最大值,以限制用户输入的范围。
- 步长控制:可以设置每次递增或递减的步长,从而更精确地控制数值的变化。
- 交互性:用户可以通过鼠标或键盘来调整输入的数值,同时
QSpinBox
还提供了多种信号,如valueChanged
,用于在数值变化时通知开发者。 - 前缀和后缀:支持前缀和后缀的显示,可以用于提供额外的信息或上下文。
🍎 常用方法
- setMinimum(int min):设置计数器的下界(最小值)。
- setMaximum(int max):设置计数器的上界(最大值)。
- setRange(int min, int max):同时设置计数器的最小值和最大值。
- setValue(int val):设置计数器的当前值。
- value():获取计数器的当前值。
🍎示例代码
以下是一个简单的示例,展示了如何在 Qt 应用程序中使用 QSpinBox
:
#include <QApplication>
#include <QWidget>
#include <QSpinBox>
#include <QVBoxLayout>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;window.setWindowTitle("QSpinBox 示例");QVBoxLayout *layout = new QVBoxLayout(&window);QLabel *label = new QLabel("请选择一个数值:", &window);layout->addWidget(label);QSpinBox *spinBox = new QSpinBox(&window);spinBox->setMinimum(1);spinBox->setMaximum(100);spinBox->setValue(10); // 设置初始值// 连接到 valueChanged 信号QObject::connect(spinBox, QOverload<int>::of(&QSpinBox::valueChanged),[](int value){ qDebug() << "当前值已更改为:" << value; });layout->addWidget(spinBox);window.show();return app.exec();
}
在这个示例中,我们创建了一个 QSpinBox
,并设置了它的最小值为 1,最大值为 100,初始值为 10。同时,我们还连接了 valueChanged
信号到一个 lambda 函数,该函数会在 QSpinBox
的值变化时打印出当前的值。
🍎总结
QSpinBox
是 Qt 框架中用于整数输入的强大控件,它提供了范围限制、步长控制、交互性等多种功能,使得在需要用户输入整数值的场景中,开发者可以更加方便地实现相应的功能。
👉🏻QDateTimeEdit
QDateTimeEdit
是 Qt 框架中的一个控件,它允许用户以交互方式输入和编辑日期和时间。这个控件结合了 QDateEdit
(用于选择日期)和 QTimeEdit
(用于选择时间)的功能,能够同时显示日期和时间,并提供丰富的配置选项和交互能力。
🍏主要特点和功能
-
日期和时间选择:用户可以通过点击控件上的箭头按钮或使用键盘来递增或递减日期和时间,也可以直接在输入框中输入日期和时间。
-
显示格式:
QDateTimeEdit
支持多种不同的显示格式,包括本地化的日期和时间格式。可以使用setDisplayFormat()
函数来设置控件的显示格式,如"yyyy-MM-dd HH:mm:ss"
。 -
范围限制:可以设置控件允许的最小和最大日期时间范围,使用
setMinimumDateTime()
和setMaximumDateTime()
函数来限制用户的选择。 -
时间步长:可以设置控件的时间步长,即每次点击箭头按钮时日期或时间增加或减少的量。
-
日历弹出:通过
setCalendarPopup()
函数可以控制是否显示日历弹出窗口,以便于用户更直观地选择日期。 -
信号和槽:
QDateTimeEdit
提供了多个信号,如dateChanged(QDate)
、timeChanged(QTime)
和dateTimeChanged(QDateTime)
,这些信号在日期、时间或日期时间发生变化时发出,可以与槽函数连接以实现自定义的响应逻辑。
🍏示例代码
以下是一个简单的示例,展示了如何在 Qt 应用程序中使用 QDateTimeEdit
:
#include <QApplication>
#include <QWidget>
#include <QDateTimeEdit>
#include <QVBoxLayout>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;window.setWindowTitle("QDateTimeEdit 示例");QVBoxLayout *layout = new QVBoxLayout(&window);QDateTimeEdit *dateTimeEdit = new QDateTimeEdit(&window);dateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm:ss"); // 设置显示格式dateTimeEdit->setMinimumDateTime(QDateTime::currentDateTime().addDays(-365)); // 设置最小日期时间dateTimeEdit->setMaximumDateTime(QDateTime::currentDateTime().addDays(365)); // 设置最大日期时间// 连接到 dateTimeChanged 信号QObject::connect(dateTimeEdit, &QDateTimeEdit::dateTimeChanged,[](const QDateTime &dateTime){ qDebug() << "日期时间已更改为:" << dateTime.toString(); });layout->addWidget(dateTimeEdit);window.show();return app.exec();
}
在这个示例中,我们创建了一个 QDateTimeEdit
控件,并设置了它的显示格式、最小和最大日期时间范围。同时,我们还连接了 dateTimeChanged
信号到一个 lambda 函数,该函数会在日期时间发生变化时打印出当前的日期时间。
🍏 总结
QDateTimeEdit
是 Qt 框架中用于日期和时间选择的强大控件,它提供了丰富的配置选项和交互能力,能够满足各种复杂的日期时间选择需求。通过合理的配置和使用,可以在 Qt 应用程序中方便地实现日期和时间的输入和编辑功能。
👉🏻QDial
QDial是Qt框架中的一个控件,用于创建一个可调节的圆形滑块控件,它继承自QAbstractSlider,提供了类似滑块的功能,但具有独特的圆形外观和交互方式。以下是关于QDial的详细介绍:
🍊 一、基本介绍
- 类名:QDial
- 继承关系:QDial继承自QAbstractSlider,因此它拥有QAbstractSlider的所有方法和信号。
- 用途:QDial常用于在整数范围内选择值,特别是在需要角度或值的调整时非常有用,如设置音量、亮度等可调节的参数。
🍊 二、特性与属性
- 圆形外观:QDial提供了一个圆形的旋钮,用户可以通过拖动旋钮或点击旋钮上的刻度来选择一个值。
- 范围控制:可以设置QDial的最小值、最大值和当前值,从而控制用户可以选择的值的范围。
- 凹口显示:QDial支持凹口(notch)的显示,这些凹口用于指示可用值的范围,可以通过设置凹口大小和凹口目标来调整凹口的显示效果。
- 环绕包装:通过设置wrapping属性,可以启用或禁用QDial的环绕包装行为。如果启用环绕包装,则QDial的刻度将首尾相连,形成一个环状;如果禁用,则QDial的刻度将在一个直线段上展开。
- 键盘和鼠标交互:QDial支持键盘和鼠标的交互,用户可以通过键盘上的箭头键、翻页键和Home/End键来调整QDial的值,也可以通过鼠标拖动或点击QDial的旋钮来调整值。
🍊 三、信号与槽
- valueChanged(int value):当QDial的值发生变化时,会发出此信号。可以通过连接此信号到槽函数来实现值的实时更新或执行其他操作。
- sliderMoved(int value):当QDial的旋钮被拖动时,会连续发出此信号。与valueChanged信号不同的是,即使禁用了跟踪属性,sliderMoved信号也会连续发出。
- sliderPressed() 和 sliderReleased():当按下和释放QDial的旋钮时,会分别发出这两个信号。
🍊 四、使用方法
在Qt应用程序中使用QDial时,通常需要按照以下步骤进行:
- 添加QDial控件:在Qt Designer中,可以通过拖放的方式将QDial控件添加到窗口中;在代码中,则可以通过创建QDial类的实例并将其添加到布局中来实现。
- 设置属性:根据需要设置QDial的最小值、最大值、当前值、凹口大小、凹口目标、环绕包装等属性。
- 连接信号与槽:将QDial的valueChanged等信号连接到相应的槽函数上,以便在值发生变化时执行特定的操作。
🍊 五、示例代码
以下是一个简单的示例代码,展示了如何在Qt应用程序中使用QDial控件:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QDial>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLabel *label = new QLabel("Current value: 0");layout->addWidget(label);QDial *dial = new QDial(&window);dial->setMinimum(0);dial->setMaximum(100);dial->setValue(50);QObject::connect(dial, &QDial::valueChanged, [=](int value) {label->setText(QString("Current value: %1").arg(value));});layout->addWidget(dial);window.show();return app.exec();
}
在这个示例中,我们创建了一个包含QDial和QLabel的窗口。当QDial的值发生变化时,QLabel将显示当前的值。
👉🏻 QSlider
QSlider是Qt框架中的一个控件,用于实现滑动条的功能。它允许用户通过拖动滑块来选择一个值,或者通过点击滑条上的位置来快速定位。QSlider控件继承自QAbstractSlider类,提供了一个水平或垂直方向上的滑块,能够很好地与Qt应用程序的其他部分集成。以下是关于QSlider的详细介绍:
🍈 一、基本属性
- 方向:QSlider可以是水平的(Horizontal Slider)或垂直的(Vertical Slider),分别用于在水平或垂直方向上进行范围选择。
- 范围:通过设置
setMinimum()
和setMaximum()
方法,可以定义滑块可以选择的最小值和最大值。 - 当前值:通过
setValue()
方法可以设置滑块的当前值,同时value()
方法用于获取当前值。 - 步长:
setSingleStep()
方法定义了滑块每次移动的最小单位,而setPageStep()
方法则定义了当用户按下Page Up或Page Down键时,滑块移动的步长。 - 刻度:QSlider支持在控件的周边显示刻度线,类似于温度计的效果。通过
setTickPosition()
方法可以设置刻度线的位置,setTickInterval()
方法可以设置刻度线的密度。
🍈 二、信号与槽
- valueChanged(int value):当滑块的值发生变化时,会发出此信号。通常将此信号连接到槽函数,以便在值变化时执行相应的操作。
- sliderPressed() 和 sliderReleased():当滑块被按下和释放时,会分别发出这两个信号。
- sliderMoved(int value):当滑块在移动过程中,会连续发出此信号(如果启用了跟踪属性)。
🍈 三、使用场景
QSlider控件广泛应用于需要用户通过滑动条来选择数值的场景,如调整音量、亮度、进度等。在水平方向上,它常用于调整音量、进度等;在垂直方向上,它则适用于调整亮度、高度等。
🍈四、示例代码
以下是一个简单的示例代码,展示了如何在Qt应用程序中使用QSlider控件:
#include <QApplication>
#include <QWidget>
#include <QSlider>
#include <QVBoxLayout>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLabel *label = new QLabel("Current value: 0");layout->addWidget(label);QSlider *slider = new QSlider(Qt::Horizontal, &window);slider->setMinimum(0);slider->setMaximum(100);slider->setValue(50);QObject::connect(slider, &QSlider::valueChanged, [=](int value) {label->setText(QString("Current value: %1").arg(value));});layout->addWidget(slider);window.show();return app.exec();
}
在这个示例中,我们创建了一个包含QLabel和QSlider的窗口。当QSlider的值发生变化时,QLabel将显示当前的值。
🍈 五、总结
QSlider是Qt框架中一个非常实用的控件,它提供了灵活的配置选项和丰富的交互能力。通过合理地使用QSlider控件,可以为用户提供直观、便捷的数值选择方式。
👉🏻QListWidget
QListWidget是Qt框架中的一个部件,用于在图形用户界面中显示一个列表。这个列表可以包含文本项、图标或其他自定义的部件,非常适合用于呈现一系列可选择的元素。以下是关于QListWidget的详细介绍:
🍌一、基本功能与特性
- 显示列表:QListWidget可以在窗口中显示一个可滚动的列表,列表项可以包含文本、图标或自定义的内容。
- 选择模式:QListWidget支持多种选择模式,包括NoSelection(不允许选择)、SingleSelection(单选)、MultiSelection(多选)、ExtendedSelection(扩展选择)和ContiguousSelection(连续选择)。
- 编辑与触发条件:通过设置triggers属性,可以指定编辑的触发条件,如不允许编辑、当前项改变时触发编辑、双击项时触发编辑等。
- 项目属性:列表中的每个项目(由QListWidgetItem表示)可以包含文本、图标、提示信息和状态标志等。
🍌 二、核心方法与信号
QListWidget提供了一系列方便的方法和信号,用于操作列表项和响应用户交互。
-
核心方法:
addItem(const QString &label)
:添加一项文本标签。addItem(QListWidgetItem *item)
:添加一项QListWidgetItem。insertItem(int row, QListWidgetItem *item)
:在指定行后添加一项QListWidgetItem。item(int row)
:返回指定行的QListWidgetItem。takeItem(int row)
:删除指定行的项,并从列表中移除,但不会自动释放内存。clear()
:清空列表中的所有项。setAlternatingRowColors(bool)
:设置是否开启交替颜色显示。
-
核心信号:
currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
:当前项改变时发出信号。currentRowChanged(int currentRow)
:当前行改变时发出信号。itemClicked(QListWidgetItem *item)
:点击项时发出信号。itemDoubleClicked(QListWidgetItem *item)
:双击项时发出信号。itemEntered(QListWidgetItem *item)
:鼠标进入某项时发出信号。
🍌 三、使用场景
QListWidget常用于显示一组可选择的元素,如文件列表、用户列表、选项列表等。用户可以通过点击、双击或拖动等操作与列表项进行交互。
🍌 四、示例代码
以下是一个简单的示例代码,展示了如何在Qt应用程序中使用QListWidget控件:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QListWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QListWidget *listWidget = new QListWidget(&window);listWidget->addItem("Item 1");listWidget->addItem("Item 2");listWidget->addItem("Item 3");layout->addWidget(listWidget);QObject::connect(listWidget, &QListWidget::itemClicked, [](QListWidgetItem *item) {qDebug() << "Clicked item:" << item->text();});window.show();return app.exec();
}
在这个示例中,我们创建了一个包含QListWidget的窗口,并向列表中添加了三个项。同时,我们连接了itemClicked
信号到一个Lambda表达式,用于在控制台输出被点击的项的文本。
👉🏻 QTableWidget
QTableWidget
是 Qt 框架中用于显示和操作表格数据的控件,它继承自 QTableView
并与 QTableWidgetItem
一起使用,提供了更高级的接口来管理表格中的单元格和行列。QTableWidget
非常适合于需要在应用程序中展示和操作二维数据集的场景。
🍋基本功能与特性
- 动态行列管理:
QTableWidget
允许你动态地添加、删除或重新排列行和列。 - 单元格编辑:你可以设置哪些单元格是可编辑的,用户可以直接在界面上修改这些单元格的内容。
- 丰富的单元格内容:每个单元格可以包含文本、图标、复选框、下拉列表等多种类型的内容。
- 选择模式:支持多种选择模式,如单选、多选、连续选择等。
- 排序与过滤:虽然
QTableWidget
本身不直接提供排序和过滤的高级功能,但你可以通过编程方式实现这些功能。 - 样式与装饰:可以通过样式表(QSS)来定制
QTableWidget
的外观,包括颜色、字体、边框等。
🍋核心方法与属性
- 行与列的操作:
rowCount()
,columnCount()
,insertRow(int row)
,removeRow(int row)
,insertColumn(int column)
,removeColumn(int column)
等方法用于管理行和列。 - 单元格的访问与修改:
setItem(int row, int column, QTableWidgetItem *item)
用于设置单元格的内容,item(int row, int column)
用于获取单元格的内容。 - 选择管理:
setCurrentCell(int row, int column)
用于设置当前选中的单元格,selectedItems()
返回所有被选中的单元格项。 - 编辑模式:
setEditTriggers(QAbstractItemView::EditTriggers triggers)
用于设置触发编辑模式的条件。
🍋 示例代码
以下是一个简单的示例,展示了如何在 Qt 应用程序中使用 QTableWidget
:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QTableWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QTableWidget *tableWidget = new QTableWidget(&window);tableWidget->setRowCount(3); // 设置行数tableWidget->setColumnCount(2); // 设置列数// 设置表头QStringList headers;headers << "Name" << "Age";tableWidget->setHorizontalHeaderLabels(headers);// 填充数据QTableWidgetItem *item;for (int row = 0; row < 3; ++row) {for (int column = 0; column < 2; ++column) {item = new QTableWidgetItem(QString("Item %1,%2").arg(row).arg(column));tableWidget->setItem(row, column, item);}}// 设置第一行第一列可编辑tableWidget->setItemDelegateForColumn(0, new QItemDelegate(&window));tableWidget->openPersistentEditor(tableWidget->item(0, 0));layout->addWidget(tableWidget);window.show();return app.exec();
}
注意:上面的示例代码中尝试设置第一行第一列的单元格为可编辑状态,但实际上 QTableWidget
的单元格默认就是可编辑的(如果内容允许)。这里使用 setItemDelegateForColumn
和 openPersistentEditor
主要是为了演示如何设置单元格的委托(Delegate)和如何打开持久编辑器,但在大多数情况下,你可能不需要这样做。
🍋 总结
QTableWidget
是 Qt 中用于展示和操作表格数据的强大控件,它提供了丰富的 API 来管理表格的各个方面,包括行列的添加删除、单元格内容的设置与获取、选择模式的管理等。通过合理使用 QTableWidget
,你可以轻松地在 Qt 应用程序中实现复杂的表格数据展示和操作功能。
👉🏻 QTreeWidget
QTreeWidget是Qt框架中的一个重要控件,用于展示层级结构的数据,它继承自QTreeView,但提供了内置的模型来简化树形数据的管理和操作。以下是对QTreeWidget的详细介绍:
🍅 一、基本功能与特性
- 层级结构展示:QTreeWidget能够显示具有父子关系的数据,支持多层嵌套,非常适合用来展示具有层级关系的数据。
- 数据编辑:它允许用户编辑树中的数据,适用于需要用户交互的场景。
- 自定义图标和文本:可以自定义每一项的图标和显示文本,增强用户界面的友好性。
- 拖放操作:支持拖放功能,允许用户在树节点之间拖动数据,提高数据的灵活性。
- 排序和过滤:支持对树节点进行排序和过滤,帮助用户快速找到所需信息。
🍅 二、核心方法与属性
QTreeWidget提供了丰富的API来操作树形结构,以下是一些常用的方法和属性:
-
添加节点:
addTopLevelItem(QTreeWidgetItem *item)
:向树中添加一个顶级项目。insertTopLevelItem(int index, QTreeWidgetItem *item)
:在指定索引处插入一个顶级项目。QTreeWidgetItem::addChild(QTreeWidgetItem *child)
:为节点添加子节点。
-
读取节点:
QTreeWidgetItem *topLevelItem(int index)
:返回指定索引处的顶层项。QTreeWidgetItem *item(int row, int column = 0)
:返回指定行列的项,对于顶层项,row为索引,column通常为0。
-
节点操作:
expandAll()
:展开所有项。collapseAll()
:折叠所有项。setCurrentItem(QTreeWidgetItem *item)
:设置当前选择的项。
-
数据访问:
QTreeWidgetItem::text(int column)
:获取节点的文本。QTreeWidgetItem::setData(int column, int role, const QVariant &value)
:为节点设置自定义数据。
-
视图控制:
setColumnCount(int columns)
:设置TreeWidget的列数。setHeaderLabels(const QStringList &labels)
:设置TreeWidget的列头标签。
🍅 三、使用场景
QTreeWidget非常适合用于需要以树形结构组织信息的应用场景,如文件浏览器、菜单系统、项目管理器等。在这些场景中,QTreeWidget能够清晰地展示数据的层级关系,方便用户进行浏览和操作。
🍅 四、注意事项
- 在使用QTreeWidget时,需要注意节点的父子关系,确保正确地添加和删除节点。
- 可以利用QTreeWidgetItem的setData和data方法来实现对节点数据的自定义存储和访问。
- QTreeWidget的交互性较强,支持点击、双击、拖放等操作,可以通过信号和槽机制来响应这些操作。
🍅 五、示例代码
以下是一个简单的示例代码,展示了如何在Qt应用程序中使用QTreeWidget:
#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTreeWidget treeWidget;treeWidget.setColumnCount(2);QStringList headers;headers << "Name" << "Value";treeWidget.setHeaderLabels(headers);QTreeWidgetItem *rootItem = new QTreeWidgetItem(&treeWidget);rootItem->setText(0, "Root");QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);childItem1->setText(0, "Child 1");childItem1->setText(1, "Value 1");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);childItem2->setText(0, "Child 2");childItem2->setText(1, "Value 2");treeWidget.show();return app.exec();
}
在这个示例中,我们创建了一个QTreeWidget控件,并设置了它的列数和列头标签。然后,我们创建了一个根节点和两个子节点,并将它们添加到树中。最后,我们调用了show方法来显示树形控件。
相关文章:

【QT】常用控件-下
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QComboBox👉🏻 QSpinBox👉🏻QDateTimeEdit👉🏻QD…...

828华为云征文|华为云Flexus X实例docker部署Jitsi构建属于自己的音视频会议系统
828华为云征文|华为云Flexus X实例docker部署Jitsi构建属于自己的音视频会议系统 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&a…...

25虾皮笔试shopee笔试测评sea笔试测评题型
虾皮笔试shopee笔试测评用的自己的笔试系统,全英文笔试: 1.Numerical Reasoning Test:10题,言语推断和数学计算 2. Verbal Reasoning Test:10题,言语理解,每题一段英文材料,选对错…...

启明云端乐鑫代理商,乐鑫ESP32无线芯片方案,物联网设备WiFi联动控制
随着智能和远程技术的飞速发展,物联网(IoT)逐渐出现在我们生活的每一个角落。乐鑫以其创新的无线通信技术,正成为智能家居、工业自动化和医疗设备等领域的推动者。 无线WiFi芯片模组不仅提供了强大的数据处理能力,还赋予了设备以直观的交互方…...

希尔排序/选择排序
前言: 本篇主要对常见的排序算法进行简要分析,代码中均以数组 arr[] { 5, 3, 9, 6, 2, 4, 7, 1, 8 } 为例,进行升序排列。 常见的排序算法有如下: 选择排序中,直接选择排序没有任何实际与教育意义,而堆排…...

漫谈设计模式 [16]:中介者模式
引导性开场 菜鸟:老鸟,我最近在开发一个聊天应用的时候遇到了点问题。每个用户都需要与其他用户直接通信,这让我在代码中写了很多复杂的逻辑来管理这些联系。这样下去,代码越来越难维护了。你有什么建议吗? 老鸟&…...

深度学习-物体检测YOLO(You only look once)
目录 一:YOLO算法的网络结构 流程 1.图像分割 2.图片在网格中的处理 3.非极大值抑制 二:训练 三:分类误差 四:与Faster R-CNN对比 一:YOLO算法的网络结构 GooleNet4个卷积2个全连接层 流程 输入原始图片resize到…...

redisson中的分布式锁
我的博客大纲 我的后端学习大纲 a.redisson概述: 1.Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)2.redisson介绍官方文档地址:3.Redisson它不仅提供了一系列的分布式的Java常用对象,还…...

如何将镜像推送到docker hub
前言 这一篇应该是最近最后一篇关于docker的博客了,咱来个有始有终,将最后一步——上传镜像给他写完,废话不多说,直接进入正题。 登录 首先需要确保登录才能推送到你的仓库中去,在终端输入docker login,输入用户名和…...

GO 匿名函数
GO 匿名函数 文章目录 GO 匿名函数1. **回调函数**2. **goroutine 中的操作**3. **延迟操作(defer)**4. **内联处理逻辑**5. **闭包**6. **过滤、映射等函数式编程风格**7. **测试中的临时逻辑**8. **短期存在的逻辑操作**总结 匿名函数在 Go 语言中的使…...

JuiceFS 在多云架构中加速大模型推理
在大模型的开发与应用中,数据预处理、模型开发、训练和推理构成四个关键环节。本文将重点探讨推理环节。在之前的博客中,社区用户 BentoML 和贝壳的案例提到了使用 JuiceFS 社区版来提高模型加载的效率。本文将结合我们的实际经验,详细介绍企…...

【DCL】Dual Contrastive Learning for General Face Forgery Detection
文章目录 Dual Contrastive Learning for General Face Forgery Detectionkey points:贡献方法数据视图生成对比学习架构实例间对比学习实例内对比学习总损失函数实验实验细节定量结果跨数据集评估跨操作评估消融实验可视化Dual Contrastive Learning for General Face Forgery…...

https的特点
https的特点 优点:缺点:HTTPS是如何保证安全的? 优点: 使用HTTPS协议可以认证用户和服务器,确保数据发送到正确的客户端和服务器;使用HTTPS协议可以进行加密传输、身份认证,通信更加安全、防止…...

〖open-mmlab: MMDetection〗解析文件:mmdet/models/losses/cross_entropy_loss.py
目录 深入解析MMDetection中的CrossEntropyLoss及其应用1. 概述2. 核心函数2.1 cross_entropy2.1.1 函数定义和参数说明2.1.2 函数体2.1.3 总结 2.2 binary_cross_entropy2.2.1 _expand_onehot_labels函数2.2.2 binary_cross_entropy函数2.2.3 总结 2.3 mask_cross_entropy2.3.…...

【PyTorch单点知识】torch.nn.Embedding模块介绍:理解词向量与实现
文章目录 0. 前言1. 基础介绍1.1 基本参数1.2 可选参数1.3 属性1.4 PyTorch源码注释 2. 实例演示3. embedding_dim的合理设定4. 结论 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但…...

Jedis 操作 Redis 数据结构全攻略
Jedis 操作 Redis 数据结构全攻略 一 . 认识 RESP二 . 前置操作2.1 创建项目2.2 关于开放 Redis 端口的问题2.2.1 端口转发?2.2.2 端口配置 2.3 连接到 Redis 服务器 三 . 通用命令3.1 set 和 get3.2 exists 和 del3.3 keys3.4 expire、ttl、type 三 . string 相关命令3.1 mse…...

ctf.show靶场ssrf攻略
前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web351 解析:post传入url参数他就会访问。 解法: hackbar传入url参数写入https://127.0.0.1/flag.php web352 解析:post传入url参数,不能是127.0.0.1和localhost 解法:缩写127.1传入 web353 解析…...

在 PyTorch 中,如何使用 `pack_padded_sequence` 来提高模型训练的效率?
在PyTorch中,pack_padded_sequence 是一个非常有用的函数,它可以用来提高模型训练的效率,特别是在处理变长序列数据时。这个函数的主要作用是将填充后的序列数据打包,以便循环神经网络(RNN)可以更高效地处理…...

Gossip协议
主要用在Redis Cluster 节点间通信 Gossip协议,也称为流行病协议(Epidemic Protocol),是一种在分布式系统中用于信息传播和故障探测的算法。 一、工作原理 随机选择传播对象 每个节点会定期随机选择一些其他节点作为传播对象。这…...

数据结构————双向链表
内存泄漏: 内存泄漏(Memory Leak)是指程序中已动态分配的内存由于某种原因程序未释放或无法释放,导致系统内存的浪费,严重时会导致程序运行缓慢甚至崩溃。这种情况在长时间运行的程序或大型系统中尤为常见,…...

55 - I. 二叉树的深度
comments: true difficulty: 简单 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9855%20-%20I.%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%B7%B1%E5%BA%A6/README.md 面试题 55 - I. 二叉树的深度 题目描述 输入一棵二叉树的根节点…...

Redis——初识Redis
初识Redis Redis认识Redis 分布式系统单机架构为什么要引入分布式理解负载均衡数据库的读写分离引入主从数据库 引入缓存数据库分库分表业务拆分——微服务常见概念了解 Redis背景介绍特性应用场景Redis不能做的事情Redis客户端redis客户端的多种形态 Redis 认识Redis 存储数…...

Xshell or Xftp提示“要继续使用此程序,您必须应用最新的更新或使用新版本”
Xshell提示“要继续使用此程序,您必须应用最新的更新或使用新版本”,笔者版本是xshell 6 方法一:更改系统时间 对于Windows 10用户,首先找到系统日期,右键点击并选择“调整时间/日期”。将日期设定为上一年。完成调整后&#x…...

table用position: sticky固定多层表头,滑动滚动条border边框透明解决方法
问题:我发现,这个上下滑动有内容经过就会出现如图的情况。 解决的方法:用outline(轮廓)替代border,以达到我们想要的样式。 outline主要是在元素边框的外围设置轮廓,outline不占据空间,绘制于…...

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码
基于飞桨paddle2.6.1cuda11.7paddleRS开发版的目标提取-道路数据集训练和预测代码 预测结果: 预测影像: (一)准备道路数据集 下载数据集地址: https://aistudio.baidu.com/datasetdetail/56961 mass_road.zip …...

数学建模笔记—— 整数规划和0-1规划
数学建模笔记—— 整数规划和0-1规划 整数规划和0-1规划1. 模型原理1.1 基本概念1.2 线性整数规划求解1.3 线性0-1规划的求解 2. 典型例题2.1 背包问题2.2 指派问题 3. matlab代码实现3.1 背包问题3.2 指派问题 整数规划和0-1规划 1. 模型原理 1.1 基本概念 在规划问题中&am…...

[001-03-007].第26节:分布式锁迭代3->优化基于setnx命令实现的分布式锁-防锁的误删
我的博客大纲 我的后端学习大纲 1、问题分析: 1.1.问题: 1.锁的超时释放,可能会释放其他服务器的锁 1.2.场景: 1.如果业务逻辑的执行时间是7s。执行流程如下 1.index1业务逻辑没执行完,3秒后锁被自动释放。2.index…...

【Unity踩坑】为什么有Rigidbody的物体运行时位置会变化
先上图,不知你有没有注意过这个现象呢? 一个物体加上了Rigidbody组件,当勾选上Use Gravity时,运行后,这个物体的位置的值会有变化。这是为什么呢? 刚体由物理系统处理,因此它会对重力、碰撞等做…...

NGINX开启HTTP3,给web应用提个速
环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…...

秋招季!别浮躁!
好久没写了,今天兴致来了,众所周知我一旦想说话,就来这里疯狂写。 最近,我去了一家国企的研究院,听着是不是贼高大上,呵——这玩意儿把我分配到三级机构,我一个学计算机的,它不把我…...