河南专业网站建设招聘,微搭低代码平台,公司做网站让拍照备案,小程序seo排名文章目录 1. 实例简介2. 源码2.1 混合式界面设计2.2 mainwindow.h2.3 mainwindow.cpp 1. 实例简介
Qt 中用于项 (Item)处理的组件有两类#xff0c;一类是 Item Views#xff0c;包括 QListView、QTreeView、QTableView、QColumnView 等;另一类是 Item Widgets#xff0c;包… 文章目录 1. 实例简介2. 源码2.1 混合式界面设计2.2 mainwindow.h2.3 mainwindow.cpp 1. 实例简介
Qt 中用于项 (Item)处理的组件有两类一类是 Item Views包括 QListView、QTreeView、QTableView、QColumnView 等;另一类是 Item Widgets包括 QListWidget、QTreeWidget 和QTableWidget。 Item Views 基于模型/视图(Model/Vicw)结构视图 (View)与模型数据(Model Data)关联实现数据的显示和编辑模型/视图结构的使用在第5 章详细介绍。 Item Widgets 是直接将数据存储在每一个项里例如QListWidget 的每一行是一个项QTreeWidget 的每个节点是一个项QTableWidget 的每一个单元格是一个项。一个项存储了文字文字的格式、自定义数据等。 Item Widgets 是GUI 设计中常用的组件本节通过实例 samp4_7 先介绍 QListWidget 以及其他一些组件的用法实例运行时界面如图 4-8 所示。 本实例不仅介绍QListWidget 的使用还包括如下一些功能的实现。
使用QTabWidget 设计多页界面工作区右侧就是一个具有 3 个页面的 TabWidget 组件。使用QToolBox 设计多组工具箱工作区左侧是一个有 3 个组的 TolBox 组件。使用分隔条(QSplitter) 设计可以左右分割的界面工作区的 TolBox 和 TabWidget 之间有一个 splitter运行时可以分割调整两个组件的大小。创建Actions用Actions 设计主工具栏用Action 关联 QToolButton 按钮。使用 QToolButton 按钮设置与 Action 关联设计具有下拉菜单功能的 ToolButton 按钮在主工具栏上添加具有下拉菜单的 ToolButton 按钮。使用 QListWidget演示如何创建和添加项为项设置图标和复选框如何遍历列表进行选择。QListWidget的主要信号currentItemChanged()的功能编写响应槽函数。为QListWidget 组件利用已设计的 Actions 创建自定义快捷菜单。
关于上述提到详细的请参考源码及书籍
2. 源码
2.1 混合式界面设计 2.2 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QListWidgetItemnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTprivate:void setActionsForButton();void createSelectionPopMenu();
public:explicit MainWindow(QWidget *parent 0);~MainWindow();private slots:void on_actListClear_triggered(); //清除项void on_actListIni_triggered(); //项初始化void on_chkBoxListEditable_clicked(bool checked); //chkBoxListEditable单击事件//当前选择项发生变化void on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);void on_actListInsert_triggered(); //插入项void on_actListAppend_triggered(); //添加项void on_actListDelete_triggered(); //删除当前项void on_listWidget_customContextMenuRequested(const QPoint pos); //弹出菜单void on_toolBox_currentChanged(int index); //ToolBox当前组变化时显示TabWidget相应的页面void on_actSelALL_triggered(); //全选void on_actSelNone_triggered();//全不选void on_actSelInvs_triggered();//反选private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
2.3 mainwindow.cpp
#include mainwindow.h
#include ui_mainwindow.h
#include QMenuvoid MainWindow::setActionsForButton()
{//为QToolButton按钮设置Actionui-tBtnListIni-setDefaultAction(ui-actListIni);ui-tBtnListClear-setDefaultAction(ui-actListClear);ui-tBtnListInsert-setDefaultAction(ui-actListInsert);ui-tBtnListAppend-setDefaultAction(ui-actListAppend);ui-tBtnListDelete-setDefaultAction(ui-actListDelete);ui-tBtnSelALL-setDefaultAction(ui-actSelALL);ui-tBtnSelNone-setDefaultAction(ui-actSelNone);ui-tBtnSelInvs-setDefaultAction(ui-actSelInvs);
}void MainWindow::createSelectionPopMenu()
{
//创建下拉菜单QMenu* menuSelectionnew QMenu(this); //创建选择弹出式菜单menuSelection-addAction(ui-actSelALL);menuSelection-addAction(ui-actSelNone);menuSelection-addAction(ui-actSelInvs);//listWidget上方的tBtnSelectItem按钮ui-tBtnSelectItem-setPopupMode(QToolButton::MenuButtonPopup);//菜单弹出模式执行按钮的Actionui-tBtnSelectItem-setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //按钮样式ui-tBtnSelectItem-setDefaultAction(ui-actSelPopMenu);//关联Actionui-tBtnSelectItem-setMenu(menuSelection); //设置下拉菜单//工具栏上的 下拉式菜单按钮QToolButton *aBtnnew QToolButton(this);aBtn-setPopupMode(QToolButton::InstantPopup);//buttons own action is not triggered.aBtn-setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//按钮样式aBtn-setDefaultAction(ui-actSelPopMenu); //设置Action,获取图标、标题等设置aBtn-setMenu(menuSelection);//设置下拉菜单ui-mainToolBar-addWidget(aBtn); //工具栏添加按钮//工具栏添加分隔条和“退出”按钮ui-mainToolBar-addSeparator();ui-mainToolBar-addAction(ui-actQuit);
}MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);setCentralWidget(ui-splitter); //设置中心组件setActionsForButton();createSelectionPopMenu();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_actListClear_triggered()
{ui-listWidget-clear(); //清除项
}void MainWindow::on_actListIni_triggered()
{ //初始化项QListWidgetItem *aItem; //每一行是一个QListWidgetItemQIcon aIcon;aIcon.addFile(:/images/icons/check2.ico); //设置ICON的图标bool chkui-chkBoxListEditable-isChecked();//是否可编辑ui-listWidget-clear(); //清除项for (int i0; i10; i){QString strQString::asprintf(Item %d,i);aItemnew QListWidgetItem(); //新建一个项aItem-setText(str); //设置文字标签aItem-setIcon(aIcon);//设置图标aItem-setCheckState(Qt::Checked); //设置为选中状态if (chk) //可编辑, 设置flagsaItem-setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);else//不可编辑, 设置flagsaItem-setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);ui-listWidget-addItem(aItem); //增加一个项}
}void MainWindow::on_chkBoxListEditable_clicked(bool checked)
{ //可编辑 QCheckBox的响应代码 设置所有项是否可编辑int i,cnt;QListWidgetItem *aItem;cntui-listWidget-count();//项的个数for (i0; icnt; i){aItemui-listWidget-item(i);//获得一个项if (checked) //可编辑aItem-setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);elseaItem-setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);}}void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{ //listWidget当前选中项发生变化QString str;if (current ! NULL) //需要检测变量指针是否为空{if (previousNULL) //需要检测变量指针是否为空str当前current-text();elsestr前一项previous-text(); 当前项current-text();ui-editCutItemText-setText(str);}
}void MainWindow::on_actListInsert_triggered()
{ //插入一个项QIcon aIcon;aIcon.addFile(:/images/icons/check2.ico); //图标bool chkui-chkBoxListEditable-isChecked(); //是否可比那几QListWidgetItem* aItemnew QListWidgetItem(New Inserted Item); //创建一个项aItem-setIcon(aIcon);//设置图标aItem-setCheckState(Qt::Checked); //设置为checkedif (chk) //设置标记aItem-setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);elseaItem-setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);ui-listWidget-insertItem(ui-listWidget-currentRow(),aItem); //在当前行的上方插入一个项}void MainWindow::on_actListAppend_triggered()
{//增加一个项QIcon aIcon;aIcon.addFile(:/images/icons/check2.ico); //设定图标bool chkui-chkBoxListEditable-isChecked();//是否可编辑QListWidgetItem* aItemnew QListWidgetItem(New Added Item); //创建一个ItemaItem-setIcon(aIcon); //设置图标aItem-setCheckState(Qt::Checked); //设置为checkedif (chk) //设置标志aItem-setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);elseaItem-setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);ui-listWidget-addItem(aItem);//增加一个项}void MainWindow::on_actListDelete_triggered()
{ //删除当前项int rowui-listWidget-currentRow();//当前行QListWidgetItem* aItemui-listWidget-takeItem(row); //移除指定行的项但不deletedelete aItem; //需要手工删除对象// QListWidgetItem *QListWidget::takeItem(int row)
// Removes and returns the item from the given row in
// the list widget; otherwise returns 0.
// Items removed from a list widget will not be managed by Qt,
// and will need to be deleted manually.
}void MainWindow::on_listWidget_customContextMenuRequested(const QPoint pos)
{Q_UNUSED(pos);QMenu* menuListnew QMenu(this); //创建菜单//添加Actions创建菜单项menuList-addAction(ui-actListIni);menuList-addAction(ui-actListClear);menuList-addAction(ui-actListInsert);menuList-addAction(ui-actListAppend);menuList-addAction(ui-actListDelete);menuList-addSeparator();menuList-addAction(ui-actSelALL);menuList-addAction(ui-actSelNone);menuList-addAction(ui-actSelInvs);menuList-exec(QCursor::pos()); //在鼠标光标位置显示右键快捷菜单delete menuList; //手工创建的指针必须手工删除
}void MainWindow::on_toolBox_currentChanged(int index)
{ui-tabWidget-setCurrentIndex(index);//ToolBox当前页与tabWidget的当前页联动
}void MainWindow::on_actSelALL_triggered()
{ //项全选int cntui-listWidget-count();//项个数for (int i0; icnt; i){QListWidgetItem *aItemui-listWidget-item(i);//获取一个项aItem-setCheckState(Qt::Checked);//设置为选中}
}void MainWindow::on_actSelNone_triggered()
{ //全不选int i,cnt;QListWidgetItem *aItem;cntui-listWidget-count();//项个数for (i0; icnt; i){aItemui-listWidget-item(i);//获取一个项aItem-setCheckState(Qt::Unchecked);//不选}
}void MainWindow::on_actSelInvs_triggered()
{//反选int i,cnt;QListWidgetItem *aItem;cntui-listWidget-count();//项个数for (i0; icnt; i){aItemui-listWidget-item(i);//获取一个项if (aItem-checkState()!Qt::Checked)aItem-setCheckState(Qt::Checked);elseaItem-setCheckState(Qt::Unchecked);}}