一、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
。