QT----------常用界面组件的使用

一、QComboBox 类

  • 主要功能:提供一个下拉列表,用户可以从中选择一个或多个选项。
cpp 复制代码
#include <QApplication>
#include <QComboBox>
#include <QVBoxLayout>
#include <QWidget>
#include <QMessageBox>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);


    QComboBox *comboBox = new QComboBox;
    comboBox->addItem("Option 1");
    comboBox->addItem("Option 2");
    comboBox->addItem("Option 3");


    QObject::connect(comboBox, QOverload<int>::of(&QComboBox::activated), [=](int index) {
        QMessageBox::information(&window, "ComboBox", "Selected item: " + comboBox->itemText(index));
    });


    layout->addWidget(comboBox);


    window.show();


    return app.exec();
}
  • 代码解释
    1. 创建一个 QComboBox 对象。
    2. 使用 addItem 方法添加选项。
    3. 使用 QObject::connect 连接 activated 信号,当用户选择一个选项时,会弹出消息框显示选择的选项文本。

二、QMainWindow 和 QAction

  • QMainWindow:通常作为主窗口,提供了菜单栏、工具栏、状态栏等的标准布局。
  • QAction:可以封装一个操作,例如保存、打开文件等,可以添加到菜单、工具栏等。
cpp 复制代码
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QMenuBar>
#include <QToolBar>
#include <QMessageBox>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QAction *action = new QAction("Open", this);
        connect(action, &QAction::triggered, this, [=]() {
            QMessageBox::information(this, "Action", "Open action triggered");
        });


        QMenu *fileMenu = menuBar()->addMenu("File");
        fileMenu->addAction(action);


        QToolBar *toolBar = addToolBar("File");
        toolBar->addAction(action);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建一个 QAction 并关联一个槽函数,当触发时弹出消息框。
    2. 创建一个 QMenu 并添加 QAction
    3. 创建一个 QToolBar 并添加 QAction

三、窗口界面可视化设计

  • 使用 Qt Designer :可以通过 Qt Designer 进行可视化设计,将所需组件拖放到界面上,设置属性,创建布局等。设计完成后会生成 .ui 文件,可通过 uic 工具将其转换为 C++ 代码。
cpp 复制代码
#include <QApplication>
#include <QtUiTools/QtUiTools>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QUiLoader loader;
    QFile file(":/path/to/your/ui/file.ui");
    file.open(QFile::ReadOnly);


    QWidget *widget = loader.load(&file);
    file.close();


    widget->show();


    return app.exec();
}
  • 代码解释
    1. 使用 QUiLoader 加载 .ui 文件。
    2. 将文件打开并读取,然后使用 loader.load 加载界面。

四、QToolBar 类

  • 主要功能:提供一个工具条,可包含多个工具按钮,通常用于快速访问常用操作。
cpp 复制代码
#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QAction>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QToolBar *toolBar = new QToolBar(this);


        QAction *action1 = new QAction("Action 1", this);
        QAction *action2 = new QAction("Action 2", this);


        toolBar->addAction(action1);
        toolBar->addAction(action2);


        addToolBar(toolBar);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QToolBar 对象。
    2. 创建 QAction 对象并添加到 QToolBar

五、QStatusBar 类

  • 主要功能:用于显示状态信息,通常在窗口底部。
cpp 复制代码
#include <QApplication>
#include <QMainWindow>
#include <QStatusBar>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QStatusBar *statusBar = new QStatusBar(this);
        statusBar->showMessage("Ready");
        setStatusBar(statusBar);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QStatusBar 对象。
    2. 使用 showMessage 显示状态信息。

六、混合 UI 设计

  • 可以将代码创建的 UI 元素和 Qt Designer 设计的 UI 元素结合使用。
cpp 复制代码
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QPushButton>
#include <QtUiTools/QtUiTools>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QUiLoader loader;
        QFile file(":/path/to/your/ui/file.ui");
        file.open(QFile::ReadOnly);


        QWidget *uiWidget = loader.load(&file);
        file.close();


        QVBoxLayout *layout = new QVBoxLayout;


        QPushButton *button = new QPushButton("Button");
        layout->addWidget(button);


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


        setCentralWidget(centralWidget);


        setCentralWidget(uiWidget);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 使用 QUiLoader 加载 .ui 文件。
    2. 创建 QPushButton 并添加到布局。
    3. 将布局设置给一个 QWidget 并作为主窗口的中央部件。

七、QPlainTextEdit 的使用

  • 主要功能:提供一个可编辑的多行文本区域。
cpp 复制代码
#include <QApplication>
#include <QPlainTextEdit>
#include <QVBoxLayout>
#include <QWidget>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget widget;
    QVBoxLayout *layout = new QVBoxLayout(&widget);


    QPlainTextEdit *plainTextEdit = new QPlainTextEdit;
    layout->addWidget(plainTextEdit);


    widget.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QPlainTextEdit 对象。
    2. 添加到布局。

八、QToolButton 和 QListWidget

  • QToolButton:可以作为工具条上的按钮,支持多种显示模式和操作。
  • QListWidget:提供一个列表,可显示多个条目。
cpp 复制代码
#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QToolButton>
#include <QListWidget>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QToolBar *toolBar = new QToolBar(this);


        QToolButton *toolButton = new QToolButton(this);
        toolButton->setText("Tool Button");


        toolBar->addWidget(toolButton);


        QListWidget *listWidget = new QListWidget(this);
        listWidget->addItem("Item 1");
        listWidget->addItem("Item 2");


        setCentralWidget(listWidget);


        addToolBar(toolBar);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QToolButton 并添加到 QToolBar
    2. 创建 QListWidget 并添加条目,作为中央部件。

九、创建右键快捷菜单

  • 可以为 QWidget 或其子类添加右键快捷菜单。
cpp 复制代码
#include <QApplication>
#include <QWidget>
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>


class MyWidget : public QWidget
{
protected:
    void contextMenuEvent(QContextMenuEvent *event) override
    {
        QMenu menu(this);


        QAction *action = new QAction("Action", this);


        connect(action, &QAction::triggered, this, [=]() {
            // 执行相应操作
        });


        menu.addAction(action);


        menu.exec(event->globalPos());
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MyWidget widget;
    widget.show();


    return app.exec();
}
  • 代码解释
    1. 重写 contextMenuEvent 方法。
    2. 创建 QMenu 并添加 QAction

十、QTreeWidget 和 QTableWidget

  • QTreeWidget:用于显示树状结构的数据。
  • QTableWidget:用于显示表格数据。
cpp 复制代码
#include <QApplication>
#include <QTreeWidget>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget widget;
    QVBoxLayout *layout = new QVBoxLayout(&widget);


    QTreeWidget *treeWidget = new QTreeWidget;
    treeWidget->setColumnCount(1);
    QTreeWidgetItem *item1 = new QTreeWidgetItem(treeWidget);
    item1->setText(0, "Item 1");


    QTableWidget *tableWidget = new QTableWidget;
    tableWidget->setRowCount(2);
    tableWidget->setColumnCount(2);
    tableWidget->setItem(0, 0, new QTableWidgetItem("Cell 1"));


    layout->addWidget(treeWidget);
    layout->addWidget(tableWidget);


    widget.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QTreeWidget 并添加 QTreeWidgetItem
    2. 创建 QTableWidget 并添加 QTableWidgetItem
相关推荐
Quz3 天前
QML Hello World 入门示例
qt
xcyxiner6 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner7 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner7 天前
DicomViewer (添加模型类)3
qt
xcyxiner8 天前
DicomViewer (目录调整) 2
qt
xcyxiner8 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00610 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术10 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园10 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob10 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio