【QT】常用控件-下

news/2024/9/18 6:29:25/ 标签: 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.ppmy.cn/news/1526178.html

相关文章

华为ensp:WLAN的无线综合实验

一、WLAN的知识点 1.WLAN的概念&#xff1a;WLAN是一种无线局域网技术&#xff0c;用于实现局部区域内的计算机设备互联和资源共享。 2.WLAN的工作原理&#xff1a;主要涉及无线网卡、接入控制器设备(AC)、无线接入点(AP)等关键组件的协同工作。 3.建立CAPWAP隧道阶段 4.为确…

优化安防视频监控的关键体验:视频质量诊断技术如何应用在监控系统中?

随着科技的不断进步&#xff0c;视频监控平台在公安、司法、教育、基础设施等众多领域得到了广泛应用。然而&#xff0c;视频图像的质量直接关系到监控系统的应用效果&#xff0c;是反映监控系统运维效果的重要指标之一。因此&#xff0c;视频监控平台需要配备一系列先进的视频…

计算机毕业设计选题推荐-项目评审系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

替换传统数据处理平台,TDengine 与华风数据达成合作

在全球能源转型的大背景下&#xff0c;新能源产业正迎来前所未有的发展机遇。随着国家对可再生能源的政策支持和市场需求的不断增长&#xff0c;风电、光伏和储能等新能源项目如雨后春笋般蓬勃发展。然而&#xff0c;随之而来的数据处理与管理挑战也日益凸显。面对海量的设备运…

返回当前栈内最小元素

设计一个栈&#xff0c;包含传统的push&#xff0c;pop&#xff0c;top方法。此外&#xff0c;再设计一个getMin函数&#xff0c;用于返回栈内最小的元素。 思想&#xff1a;存储普通的数据元素用eStack,存储最小值用栈minStack。当eStack存一个元素时&#xff0c;minStack记录…

react native(expo)选择图片/视频并上传阿里云oss

1.引入相关库&#xff1a; ant-design/react-native ant风格UI库 expo-file-system 文件访问 expo-image-picker 图片/视频选择器 2.新建图片选择并上传的帮助类 import { Toast } from ant-design/react-native; import * as FileSystem from "expo-file-system"…

Android系列基础知识总结

四大组件 Activity Activity生命周期 不同场景下Activity生命周期的变化过程 启动Activity&#xff1a; onCreate()—>onStart()—>onResume()&#xff0c;Activity进入运行状态。Activity退居后台&#xff1a; 当前Activity转到新的Activity界面或按Home键回到主屏&a…

前端-CDN的理解及CDN一些使用平台

目录 1.CDN的概念 &#xff08;1&#xff09; 分发服务系统 &#xff08;2&#xff09;均衡负荷系统 &#xff08;3&#xff09;运营管理系统 &#xff08;4&#xff09;缓存系统 &#xff08;5&#xff09;支撑系统 2.CDN的基本工作原理 3.CDN使用缓存资源过程 4.CDN…

前端Vue框架实现html页面输出pdf(html2canvas,jspdf)

代码demo&#xff1a; <template><el-dialog class"storageExportDialog" :fullscreen"true" title"" :visible.sync"visible" v-if"visible" width"600px"><div id"exportContainer" …

[极客大挑战 2019]Http

1、访问题目链接 2、查看页面源码发现一个Secret.php的跳转页面 3、访问Secret.php发现页面有提示&#xff0c;它说它不是来自这个网页 4、抓包修改来源 添加&#xff1a;Referer: https://Sycsecret.buuoj.cn 发送查看响应 5、修改User-Agent为&#xff1a;Syclover 6、添加X-…

【Qt系列样式表】探索Qt Widget的艺术化设计与应用(Macos风格)(持续更新中...)

✨✨ Rqtz 个人主页 : 点击✨✨ &#x1f308;Qt系列专栏:点击 &#x1f388;PyQt系列专栏:点击&#x1f388; &#x1f388;Qt智能车上位机专栏: 点击&#x1f388; &#x1f388;Qt串口助手专栏:点击&#x1f388; &#x1f4ab;宗旨:共享IT之美,共创机器未来 目录 界面…

编译QT源码时的configure参数须知

文章目录 一、configure help原文二、configure help机译三、features 执行命令得到configure帮助文件 qtsrc/configure --help一、configure help原文 Usage: configure [options] [-- cmake-options]This is a convenience script for configuring Qt with CMake. Options…

iPhone 16 发布 “从零开始为人工智能设计”的iPhone

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

数论-快速幂

快速幂 模板代码推导过程 求 A^B mod C&#xff0c;时间复杂度 O(logB) 模板代码 using ll long long; // 可以在头文件中添加这行ll qmi(ll a, ll b, ll c) {ll ans 1; // 初始化结果为 1a % c; // 将 a 取模 c&#xff0c;确保 a 小于 cwhile (b) …

Go语言现代web开发05 指针和结构体

指针 Pointers are complex data types that store the memory address of value. Simply put, if we have a value stored in the memory address as 100 and a pointer to that value, the pointer value will be 100. The default value for a pointer is nil. Nil pointer…

重修设计模式-创建型-建造者模式

重修设计模式-创建型-建造者模式 允许用户通过链式调用方法来逐步构建复杂对象&#xff0c;让复杂对象的构建与它的表示分离&#xff0c;即对象的表示和对象的构造过程解耦。 建造者模式的原理和实现非常简单&#xff0c;重点在于复杂对象的构建过程和定制化。具体实现中&#…

OkHttp Interceptor日志上报

最近为了做一些网络上的优化&#xff0c;所以就得提前埋点&#xff0c;为后续网络优化提供数据支持。 主要是对发起请求埋点&#xff0c;请求错误埋点&#xff0c;客户端请求耗时埋点。 事件上报到阿里云&#xff0c;接入的是阿里的应用实时监控服务。 网络请求使用的是OhHttp…

【移动端】Flutter与uni-app:全方位对比分析

文章目录 一、含义1. Flutter2. uni-app 二、开发程序步骤1. Flutter2. uni-app 三、基本语言区别四、优缺点1. Flutter2. uni-app优点&#xff1a;缺点&#xff1a; 五、如何选型 一、含义 1. Flutter Flutter是由Google开发的一款跨平台移动应用开发框架&#xff0c;采用Da…

怎么选择适合的服务器

大家都知道&#xff0c;不管是公司还是个人&#xff0c;在数字化浪潮已经席卷全球的环境下&#xff0c;大家对服务器的需求是日渐增长的。很多人在买服务器的时候&#xff0c;多少都有点选择困难&#xff0c;今天我们就来对比下物理服务器和弹性云服务器&#xff0c;看看选哪个…

【leetcode C++】动态规划

16. 123. 买股票的最佳时机3 题目&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售…