【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);

        // 创建 QLabel
        QLabel *label = new QLabel("请选择一个选项:", this);
        layout->addWidget(label);

        // 创建 QComboBox
        QComboBox *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.mfbz.cn/a/875931.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第四届长城杯部分wp

还是太菜了&#xff0c;要经常练了 1.BrickGame 读源码可以看到时间的值是由js设定的&#xff0c;所以控制台将timeleft的时间改成999999 通过游戏就可以得到flag 2.SQLUP 一道文件上传的题目&#xff0c;在登陆页面我用admin和1登陆成功了&#xff0c;但是按照正常的应该是…

实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试

画面描述:这个视频中,一位穿着蓝色西装的女性站在室内,背景中可以看到一些装饰品和植物。她双手交叉放在身前,面带微笑,似乎在进行一场演讲或主持活动。她的服装整洁,显得非常专业和自信。 一、简介 阿里通义千问开源新一代视觉语言模型Qwen2-VL。其中,Qwen2-VL-72B在大…

Spring Boot 集成 Redisson 实现消息队列

包含组件内容 RedisQueue&#xff1a;消息队列监听标识RedisQueueInit&#xff1a;Redis队列监听器RedisQueueListener&#xff1a;Redis消息队列监听实现RedisQueueService&#xff1a;Redis消息队列服务工具 代码实现 RedisQueue import java.lang.annotation.ElementTyp…

清理C盘缓存的垃圾,专业清理C盘缓存垃圾的步骤与策略

在维护计算机系统的过程中&#xff0c;定期清理C盘&#xff08;通常是系统盘&#xff09;中的缓存和垃圾文件是一项至关重要的任务。这不仅能有效释放磁盘空间&#xff0c;提升系统性能&#xff0c;还能减少因磁盘空间不足导致的程序运行缓慢或错误。以下是一系列专业且安全的步…

请求响应-02.请求-postman工具

一.前后端分离开发 当前主流的开发模式是前后端分离开发&#xff0c;每开发一个功能&#xff0c;就需要对该功能接口进行测试&#xff0c;当前我们的测试方法是直接将url地址输入到浏览器中&#xff0c;查看web页面是否满足我们的要求。但是浏览器发起的请求全部都是GET请求&am…

架构设计 - 常用日志收集方案选型对比与推荐

目录 1. 常用组合1.1 ELK Stack -> Elastic Stack1.2 EFK Stack1.3 Graylog1.4 PLG 日志系统1.5 Splunk1.6 Filebeat ELK1.7 AWS CloudWatch Logs1.8 阿里云日志服务1.9 腾讯云 CLS&#xff08;日志服务&#xff09; 2. 推荐 日志收集是系统监控和调试中的关键环节。常见的…

[ RK3566-Android11 ] 关于 RK628F 驱动移植以及调试说明

问题描述 我这个项目的SDK比较老&#xff0c;移植RK628F最新驱动的调试过程&#xff0c;踩了很多坑&#xff0c;希望大家别踩坑。 解决方案&#xff1a; 首先在FTP上下载最新的RK628的驱动 rk628-for-all-v27-240730 版本。 下载完后 不要直接替换&#xff0c;不要直接替换&a…

小琳AI课堂:o1系列模型

大家好&#xff0c;这里是小琳AI课堂&#xff01;今天我们一起来探索OpenAI最新发布的o1系列模型&#xff0c;这可是AI领域的一大突破哦&#xff01; OpenAI o1系列模型技术大揭秘 o1系列模型是基于强化学习&#xff08;RL&#xff09;训练的&#xff0c;包括o1-preview和o1-…

【CSS】选择器(基本选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" href"./样式.css"…

起重机检测系统源码分享

起重机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

直播相关02-录制麦克风声音,QT 信号与槽,自定义信号和槽

一 信号与槽函数 #include "mainwindow.h" #include <QPushButton> #include <iostream> using namespace std;//我们的目的是在 window中加入一个button&#xff0c;当点击这个button后&#xff0c;关闭 MainWindow 。 MainWindow::MainWindow(QWidget …

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 GPT系列论文速通论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具…

【Unity学习心得】如何制作俯视角射击游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、制作流程 1.制作地图2.实现人物动画和移动脚本3.制作单例模式和对象池4.制作手枪pistol和子弹bullet和子弹壳bulletShell5.制作散弹枪shotgun总…

MMLU-Pro 基准测试数据集上线,含 12k 个跨学科复杂问题,难度提升,更具挑战性!DeepSeek 数学模型一键部署

在大语言模型 (LLM) 蓬勃发展的时代&#xff0c;诸如大规模多任务语言理解 (MMLU) 之类的基准测试&#xff0c;在推动 AI 于不同领域的语言理解与推理能力迈向极限方面&#xff0c;发挥着至关重要的关键作用。 然而&#xff0c;伴随模型的持续改进与优化&#xff0c;LLM 在这些…

Vue路由:Vue router

目录 路由的基本概念 1. 路由 2. 单页应用SPA 3.前端路由的实现方式 3.1Hash模式 3.2History模式 Vue router 4 1.概述 2.安装使用 3.基础用法 3.1路由匹配规则声明 3.2动态路由匹配 3.3路由命名 3.4路由重定向 3.5路由嵌套 3.6命名视图 3.6声明式导航&编程…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据&#xff0c;我们首先会想到typenumber&#xff0c;设置完type为number时会限制我们输入的内容只能为数字&#xff0c;不能为字符/汉字等非数字类型的数值&…

【网络安全】-文件下载漏洞-pikachu

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录  前言 什么是文件下载漏洞&#xff1f; 1.常见形式&#xff1a; 常见链接形式&#xff1a; 常见参数&#xff1a; 2.利用方式&#xff1a; 3.举例&#xff1a;pikachu不安全的文件…

智能语音技术在人机交互中的应用与发展

摘要&#xff1a;本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信&#xff0c;建立起能听能说的智能口语系统。同时&#xff0c;引入开源 AI 智能名片小程序&#xff0c;分析其在智能语音技术应用场景下的意义与发…

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…

计算架构模式之负载均衡技巧

通用负载均衡算法 负载均衡算法 -轮询 & 随机 如果服务器挂掉了&#xff0c;那么负载均衡器还是可以感知到的&#xff0c;因为连接已经断掉了。 负载均衡算法-加权轮询 假设你有4核的和8核的&#xff0c;由于你的程序没有办法跑完CPU&#xff0c;那么有可能出现4核的和8核…