【QT】常用控件-下

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:QT

在这里插入图片描述


目录

  • 👉🏻QComboBox
  • 👉🏻 QSpinBox
  • 👉🏻QDateTimeEdit
  • 👉🏻QDial
  • 👉🏻 QSlider
  • 👉🏻QListWidget
  • 👉🏻 QTableWidget
  • 👉🏻 QTreeWidget
  • 👉🏻QVBoxLayout

👉🏻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 适用于各种需要用户输入整数值的场景,如数量选择、数值设置等。

🍎 主要特点

  1. 整数输入QSpinBox 只能接收和显示整数,不支持浮点数。
  2. 范围限制:可以设置允许输入的最小值和最大值,以限制用户输入的范围。
  3. 步长控制:可以设置每次递增或递减的步长,从而更精确地控制数值的变化。
  4. 交互性:用户可以通过鼠标或键盘来调整输入的数值,同时 QSpinBox 还提供了多种信号,如 valueChanged,用于在数值变化时通知开发者。
  5. 前缀和后缀:支持前缀和后缀的显示,可以用于提供额外的信息或上下文。

🍎 常用方法

  • 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(用于选择时间)的功能,能够同时显示日期和时间,并提供丰富的配置选项和交互能力。

🍏主要特点和功能

  1. 日期和时间选择:用户可以通过点击控件上的箭头按钮或使用键盘来递增或递减日期和时间,也可以直接在输入框中输入日期和时间。

  2. 显示格式QDateTimeEdit 支持多种不同的显示格式,包括本地化的日期和时间格式。可以使用 setDisplayFormat() 函数来设置控件的显示格式,如 "yyyy-MM-dd HH:mm:ss"

  3. 范围限制:可以设置控件允许的最小和最大日期时间范围,使用 setMinimumDateTime()setMaximumDateTime() 函数来限制用户的选择。

  4. 时间步长:可以设置控件的时间步长,即每次点击箭头按钮时日期或时间增加或减少的量。

  5. 日历弹出:通过 setCalendarPopup() 函数可以控制是否显示日历弹出窗口,以便于用户更直观地选择日期。

  6. 信号和槽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时,通常需要按照以下步骤进行:

  1. 添加QDial控件:在Qt Designer中,可以通过拖放的方式将QDial控件添加到窗口中;在代码中,则可以通过创建QDial类的实例并将其添加到布局中来实现。
  2. 设置属性:根据需要设置QDial的最小值、最大值、当前值、凹口大小、凹口目标、环绕包装等属性。
  3. 连接信号与槽:将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的详细介绍:

🍌一、基本功能与特性

  1. 显示列表:QListWidget可以在窗口中显示一个可滚动的列表,列表项可以包含文本、图标或自定义的内容。
  2. 选择模式:QListWidget支持多种选择模式,包括NoSelection(不允许选择)、SingleSelection(单选)、MultiSelection(多选)、ExtendedSelection(扩展选择)和ContiguousSelection(连续选择)。
  3. 编辑与触发条件:通过设置triggers属性,可以指定编辑的触发条件,如不允许编辑、当前项改变时触发编辑、双击项时触发编辑等。
  4. 项目属性:列表中的每个项目(由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 非常适合于需要在应用程序中展示和操作二维数据集的场景。

🍋基本功能与特性

  1. 动态行列管理QTableWidget 允许你动态地添加、删除或重新排列行和列。
  2. 单元格编辑:你可以设置哪些单元格是可编辑的,用户可以直接在界面上修改这些单元格的内容。
  3. 丰富的单元格内容:每个单元格可以包含文本、图标、复选框、下拉列表等多种类型的内容。
  4. 选择模式:支持多种选择模式,如单选、多选、连续选择等。
  5. 排序与过滤:虽然 QTableWidget 本身不直接提供排序和过滤的高级功能,但你可以通过编程方式实现这些功能。
  6. 样式与装饰:可以通过样式表(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 的单元格默认就是可编辑的(如果内容允许)。这里使用 setItemDelegateForColumnopenPersistentEditor 主要是为了演示如何设置单元格的委托(Delegate)和如何打开持久编辑器,但在大多数情况下,你可能不需要这样做。

🍋 总结

QTableWidget 是 Qt 中用于展示和操作表格数据的强大控件,它提供了丰富的 API 来管理表格的各个方面,包括行列的添加删除、单元格内容的设置与获取、选择模式的管理等。通过合理使用 QTableWidget,你可以轻松地在 Qt 应用程序中实现复杂的表格数据展示和操作功能。

👉🏻 QTreeWidget

QTreeWidget是Qt框架中的一个重要控件,用于展示层级结构的数据,它继承自QTreeView,但提供了内置的模型来简化树形数据的管理和操作。以下是对QTreeWidget的详细介绍:

🍅 一、基本功能与特性

  1. 层级结构展示:QTreeWidget能够显示具有父子关系的数据,支持多层嵌套,非常适合用来展示具有层级关系的数据。
  2. 数据编辑:它允许用户编辑树中的数据,适用于需要用户交互的场景。
  3. 自定义图标和文本:可以自定义每一项的图标和显示文本,增强用户界面的友好性。
  4. 拖放操作:支持拖放功能,允许用户在树节点之间拖动数据,提高数据的灵活性。
  5. 排序和过滤:支持对树节点进行排序和过滤,帮助用户快速找到所需信息。

🍅 二、核心方法与属性

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方法来显示树形控件。


👉🏻QVBoxLayout

QVBoxLayout 是 Qt 框架中用于管理窗口部件(widgets)布局的一个类,它属于 QLayout 的子类。QVBoxLayout 以垂直方式排列其子部件,每个子部件按顺序垂直堆叠,可以根据需要自动调整子部件的大小和位置。这对于创建具有垂直排列元素的用户界面非常有用。

基本用法

  1. 创建 QVBoxLayout 实例
    首先,你需要创建一个 QVBoxLayout 的实例。这通常在创建窗口或对话框的 QWidget 或其子类时进行。

    QVBoxLayout *layout = new QVBoxLayout;
    
  2. 添加部件到 QVBoxLayout
    使用 addWidget() 方法可以将部件(如按钮、文本框等)添加到布局中。这些部件将按照添加的顺序垂直排列。

    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");
    layout->addWidget(button1);
    layout->addWidget(button2);
    
  3. 设置布局到 QWidget
    将创建的 QVBoxLayout 实例设置为某个 QWidget 的布局。这通常是通过调用 QWidgetsetLayout() 方法完成的。

    QWidget *window = new QWidget;
    window->setLayout(layout);
    

    或者,如果你正在处理一个窗口或对话框(继承自 QDialogQMainWindow),你可能需要在适当的地方(如构造函数)设置布局。

  4. (可选)调整部件大小和策略
    你可以使用 addWidget() 的重载版本来指定部件的拉伸因子(stretch factor)和/或对齐方式,以更精细地控制布局。

    // 将第一个按钮设置为拉伸因子为 1,第二个按钮为 2,意味着第二个按钮将占据更多空间
    layout->addWidget(button1, 1);
    layout->addWidget(button2, 2);
    
  5. (可选)添加间隔和边距
    你可以通过调用 addSpacing() 方法在部件之间添加额外的垂直空间,通过 setContentsMargins() 方法设置布局与父部件边界之间的空间。

    layout->addSpacing(20); // 在两个部件之间添加 20 像素的间距
    layout->setContentsMargins(10, 10, 10, 10); // 设置边距
    

示例

下面是一个简单的示例,展示了如何在一个窗口中使用 QVBoxLayout 来垂直排列两个按钮:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout;QPushButton *button1 = new QPushButton("Button 1");QPushButton *button2 = new QPushButton("Button 2");layout->addWidget(button1);layout->addWidget(button2);window.setLayout(layout);window.show();return app.exec();
}

这个示例创建了一个简单的窗口,其中包含两个垂直排列的按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/425560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树OJ题——二叉树的最大深度

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 二叉树的最大深度 二、解题思路 三、解题代码

API - String 和 ArrayList

01 API是什么 答&#xff1a;API 全称 Application Programming Interfaace 应用程序编程接口。就是别人写好的一些程序&#xff0c;我们可以使用它们去解决相关问题。 02 为什么要学API 答&#xff1a;不要重复造轮子。Java已经有20多年的历史了&#xff0c;在这20多年里Ja…

【电路笔记】-差分运算放大器

差分运算放大器 文章目录 差分运算放大器1、概述2、差分运算放大器表示2.1 差分模式2.2 减法器模式3、差分放大器示例3.1 相关电阻3.2 惠斯通桥3.3 光/温度检测4、仪表放大器5、总结1、概述 在之前的文章中,我们讨论了反相运算放大器和同相运算放大器,我们考虑了在运算放大器…

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图&#xff1a;这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢&#xff0c;安装过一版最新的android studio&#xff0c;然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候&#xff0c;就报错了&#xff1a; Execution failed…

初探全同态加密1 —— FHE的定义与历史回顾

文章目录 一、加密体系1、什么是加密体系2、加密体系的属性 Properties 二、同态加密&#xff1a;偶然的特殊性质三、同态加密体系的分类四、部分同态加密 Partially Homomorphic Encryption1、加法同态加密算法 —— ElGamal 加密算法1.1、ElGamal 的大致步骤1.2、ElGamal 的加…

7-ZIP工具的功能分享:合并分卷压缩文件

在日常工作中&#xff0c;有些大文件无法单独传输&#xff0c;我们通常会通过压缩拆分成多个分卷文件来完成传输。 当完成传输后&#xff0c;不想要这么多分卷文件的时候&#xff0c;就可以通过7-ZIP工具的合并功能来解决这个问题。下面一起来看看&#xff0c;具体如何操作。 …

Cortex-A7的GIC(通用中断控制器):边沿触发和电平触发中断处理流程

0 资料 ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification1 边沿触发和电平触发中断处理流程 1.0 边沿触发和电平触发的区别 边沿触发&#xff08;Edge-triggered&#xff09; This is an interrupt that is asserted on detection of…

学习笔记(一)

前言 一、对象 1、由类建模而成&#xff0c;是消息、数据和行为的组合 2、可以接收和发送消息&#xff0c;并利用消息进行彼此的交互。消息要包含传送给对象接收的信息 3、类的实例化&#xff1a;把类转换为对象的过程叫类的实例化。 4、对象的特性 (1) 对象有状态&#…

node.js+Koa框架+MySQL实现注册登录

完整视频展示&#xff1a;https://item.taobao.com/item.htm?ftt&id831092436619&spma21dvs.23580594.0.0.52de2c1bg9gTfM 效果展示&#xff1a; 一、项目介绍 本项目是基于node.jsKoamysql的注册登录的项目,主要是给才学习node.js和Koa框架的萌新才写的。 二、项目…

Datawhale------Tiny-universe学习笔记——Qwen(1)

1. Qwen整体介绍 对于一个完全没接触过大模型的小白来说&#xff0c;猛一听这个名字首先会一懵&#xff1a;Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍&#xff1a;Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展&a…

Pytorch详解-模型模块(RNN,CNN,FNN,LSTM,GRU,TCN,Transformer)

Pytorch详解-模型模块 Module & parameterModule初认识forward函数 ParameterPytorch中的权重、参数和超参数 Module容器-ContainersSequentialModuleListModuleDictParameterList & ParameterDict 常用网络层LSTM输入和输出 GRUConvolutional Layers卷积层的基本概念常…

第十七节:学习Hutool上传文件(自学Spring boot 3.x的第四天)

这节记录下如何使用Hutool库上传本地的文件到服务器端&#xff08;因为是练习&#xff0c;所以是本地端&#xff09;。 第一步&#xff1a;引入Hutool库最新版本&#xff0c;通过maven方式。&#xff08;最新版本需去maven仓库查询&#xff09; 第二步&#xff1a;编写一个post…

sqlgun新闻管理系统

一&#xff0c;打开主页 1.输入框测试回显点 -1union select 1,2,3# 出现回显点2 2.查看数据库表名 -1union select 1,database(),3# 3.查看表名 -1union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasqlgunnews# 4.查看admin中…

【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、NAT、Ipv6)

文章目录 方案一、动态分配 IP 地址方案二、NATNAT 机制的缺点 方案三、IPv6 方案一、动态分配 IP 地址 一个设备上网就分配 IP&#xff0c;不上网就先不分配&#xff08;权宜之计&#xff09; 方案二、NAT 网络地址转换 以一当千&#xff0c;使用一个 IP&#xff0c;代表一大…

【探索数据结构与算法】希尔排序原理、实现与分析(图文详解)

目录 一、 引言 二、算法思想 三、算法步骤 四、代码实现 五、复杂度 &#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;探索数据结构与算法 一、 引言 希尔排序&#xff08;Shell Sort&#xff09;是插入排序的一种更高效的改进版本&#x…

oracle 使用 PL/SQL Developer创建表并插入单条、多条数据

第一步&#xff1a;使用工具创建表&#xff08;前提是库已经创建好了&#xff09;&#xff1a;在当前用户下找到Tables 然后点击并右键&#xff0c;点击新建 写上表名&#xff0c;写上表名的注释 第二步添加字段&#xff1a;点击列&#xff0c;然后分别写上你自己需要的字段及名…

LDR6020,单C口OTG,充放一体新潮流!

PD&#xff08;Power Delivery&#xff09;芯片实现单Type-C接口输入和输出OTG&#xff08;On-The-Go&#xff09;功能&#xff0c;主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释&#xff1a; 一、PD芯片基础功能 …

OpenCV_图像像素读写操作

本文详细介绍了如何在C项目中使用OpenCV进行图像像素的读写操作&#xff0c;包括使用头文件声明Pixel类&#xff0c;通过遍历和指针方式处理灰度图和彩色图&#xff0c;以及在主函数中调用这些操作。 数组遍历的方式进行图像像素读写 void QuickDemo::pixelVisit_Demo(Mat&am…

【Android安全】Ubuntu 16.04安装GDB和GEF

1. 安装GDB sudo apt install gdb-multiarch 2. 安装GEF(GDB Enhanced Features) 官网地址&#xff1a;https://github.com/hugsy/gef 2.1 安装2021.10版本 但是在Ubuntu 16.04上&#xff0c;bash -c "$(curl -fsSL https://gef.blah.cat/sh)"等命令不好使&…

文字loading加载

效果 1. 导入库 import sys from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QPainter, QFont, QColor, QBrush from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar, QLabel 代码首先导入了P…