一、QComboBox 类
- 主要功能:提供一个下拉列表,用户可以从中选择一个或多个选项。
#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();
}
- 代码解释:
- 创建一个
QComboBox
对象。 - 使用
addItem
方法添加选项。 - 使用
QObject::connect
连接 activated
信号,当用户选择一个选项时,会弹出消息框显示选择的选项文本。
二、QMainWindow 和 QAction
- QMainWindow:通常作为主窗口,提供了菜单栏、工具栏、状态栏等的标准布局。
- QAction:可以封装一个操作,例如保存、打开文件等,可以添加到菜单、工具栏等。
#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();
}
- 代码解释:
- 创建一个
QAction
并关联一个槽函数,当触发时弹出消息框。 - 创建一个
QMenu
并添加 QAction
。 - 创建一个
QToolBar
并添加 QAction
。
三、窗口界面可视化设计
- 使用 Qt Designer:可以通过 Qt Designer 进行可视化设计,将所需组件拖放到界面上,设置属性,创建布局等。设计完成后会生成
.ui
文件,可通过 uic
工具将其转换为 C++ 代码。
#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();
}
- 代码解释:
- 使用
QUiLoader
加载 .ui
文件。 - 将文件打开并读取,然后使用
loader.load
加载界面。
四、QToolBar 类
- 主要功能:提供一个工具条,可包含多个工具按钮,通常用于快速访问常用操作。
#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();
}
- 代码解释:
- 创建
QToolBar
对象。 - 创建
QAction
对象并添加到 QToolBar
。
五、QStatusBar 类
#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();
}
- 代码解释:
- 创建
QStatusBar
对象。 - 使用
showMessage
显示状态信息。
六、混合 UI 设计
- 可以将代码创建的 UI 元素和 Qt Designer 设计的 UI 元素结合使用。
#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();
}
- 代码解释:
- 使用
QUiLoader
加载 .ui
文件。 - 创建
QPushButton
并添加到布局。 - 将布局设置给一个
QWidget
并作为主窗口的中央部件。
七、QPlainTextEdit 的使用
#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();
}
- 代码解释:
- 创建
QPlainTextEdit
对象。 - 添加到布局。
八、QToolButton 和 QListWidget
- QToolButton:可以作为工具条上的按钮,支持多种显示模式和操作。
- QListWidget:提供一个列表,可显示多个条目。
#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();
}
- 代码解释:
- 创建
QToolButton
并添加到 QToolBar
。 - 创建
QListWidget
并添加条目,作为中央部件。
九、创建右键快捷菜单
- 可以为
QWidget
或其子类添加右键快捷菜单。
#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();
}
- 代码解释:
- 重写
contextMenuEvent
方法。 - 创建
QMenu
并添加 QAction
。
十、QTreeWidget 和 QTableWidget
- QTreeWidget:用于显示树状结构的数据。
- QTableWidget:用于显示表格数据。
#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();
}
- 代码解释:
- 创建
QTreeWidget
并添加 QTreeWidgetItem
。 - 创建
QTableWidget
并添加 QTableWidgetItem
。