QT 5.9 93页例子

mac2024-04-11  30

头文件

`#ifndef MYMAINWINDOW_H #define MYMAINWINDOW_H #pragma execution_character_set("utf-8") //解决中文乱码 #include <QMainWindow> #include<QListWidgetItem> namespace Ui { class myMainWindow; } class myMainWindow : public QMainWindow { Q_OBJECT public: explicit myMainWindow(QWidget *parent = 0); ~myMainWindow(); private slots: void on_actListIni_triggered(); void on_actListInsert_triggered(); void on_actListDelete_triggered(); void on_actListClear_triggered(); void on_actSelAll_triggered(); void on_actNoSrlAll_triggered(); void on_actRev_triggered(); void on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); void on_listWidget_customContextMenuRequested(const QPoint &pos); private: void createSelectPopMenu(); private: Ui::myMainWindow *ui; }; #endif // MYMAINWINDOW_H

//头文件实现

#include "mymainwindow.h" #include "ui_mymainwindow.h" #include<QMenu> myMainWindow::myMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::myMainWindow) { ui->setupUi(this); //setCentralWidget(ui->splitter); createSelectPopMenu(); } myMainWindow::~myMainWindow() { delete ui; } void myMainWindow::on_actListIni_triggered() { QListWidgetItem *aItem;//每行是Item QIcon aIcon; aIcon.addFile(":/列表.png"); bool chk = ui->checkBox->isCheckable();//是否可编辑 ui->listWidget->clear(); for(int i = 0;i<10;i++) { aItem = new QListWidgetItem(); QString str = QString::asprintf("Item %d",i); aItem->setText(str);//设置文字标签 aItem->setIcon(aIcon);//设置图标 aItem->setCheckState(Qt::Unchecked);//设置为选中状态 if(chk)//判断是否可编辑,设置flags aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); else aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); ui->listWidget->addItem(aItem); } } void myMainWindow::on_actListInsert_triggered() {//插入一个项 QIcon aIcon; aIcon.addFile(":/插入行.png"); bool chk=ui->checkBox->isCheckable(); QListWidgetItem *aItem = new QListWidgetItem("New Inserted Item"); aItem->setIcon(aIcon); aItem->setCheckState(Qt::Checked); if(chk) aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); else aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); ui->listWidget->insertItem(ui->listWidget->currentRow(),aItem); } void myMainWindow::on_actListDelete_triggered() { int row = ui->listWidget->currentRow(); QListWidgetItem *aItem = ui->listWidget->takeItem(row); delete aItem; } void myMainWindow::on_actListClear_triggered() { ui->listWidget->clear(); } void myMainWindow::on_actSelAll_triggered() {//全选中 int cnt = ui->listWidget->currentRow();//个数 for(int i = 0;i < cnt; i++) { QListWidgetItem *aItem = ui->listWidget->item(i);//获取一项 aItem->setCheckState(Qt::Checked); } } void myMainWindow::on_actNoSrlAll_triggered() {//全不选中 int cnt = ui->listWidget->currentRow();//个数 for(int i = 0;i < cnt; i++) { QListWidgetItem *aItem = ui->listWidget->item(i);//获取一项 aItem->setCheckState(Qt::Unchecked); } } void myMainWindow::on_actRev_triggered() { int cnt = ui->listWidget->currentRow();//个数 for(int i = 0;i < cnt; i++) { QListWidgetItem *aItem = ui->listWidget->item(i);//获取一项 aItem->setCheckState(Qt::PartiallyChecked); } } void myMainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { QString str; if(current != NULL) { if(previous == NULL) str = "前一项: "+current->text(); else str = "前一项: "+previous->text()+";当前项:"+current->text(); ui->lineEdit->setText(str); } } void myMainWindow::createSelectPopMenu() {//为QtoolButton设计下拉菜单 QMenu *menuSelection = new QMenu(this);//创建弹出式菜单 menuSelection->addAction(ui->actSelAll); menuSelection->addAction(ui->actNoSrlAll); menuSelection->addAction(ui->actRev); //listwidget上方的btn按钮 ui->toolButton_6->setPopupMode(QToolButton::MenuButtonPopup); ui->toolButton_6->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); ui->toolButton_6->setDefaultAction(ui->actRev); ui->toolButton_6->setMenu(menuSelection); //工具栏项选择 /* QToolButton *aBtn = new QToolButton(this); aBtn->setPopupMode(QToolButton::InstantPopup); aBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//按钮样式 aBtn->setDefaultAction(ui->actRev); aBtn->setMenu(menuSelection);//设置下拉菜单 ui->mainToolBar->addWidget(aBtn);//在工具栏添加按钮 //工具栏添加分隔条,和退出按钮 ui->mainToolBar->addAction(ui->actEsc); *///由于前期ui布局有点和书上例子有区别故这段代码不要,要了也能跑起来只是难看 ui->mainToolBar->addSeparator(); } void myMainWindow::on_listWidget_customContextMenuRequested(const QPoint &pos) { Q_UNUSED(pos); QMenu *menuList=new 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->actNoSrlAll); menuList->addAction(ui->actSelAll); menuList->addAction(ui->actRev); menuList->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单 delete menuList; } ![Actions](https://img-blog.csdnimg.cn/20191031133021397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk5MjE3MQ==,size_16,color_FFFFFF,t_70) ```![信号和槽](https://img-blog.csdnimg.cn/20191031132930876.png)![这是gui布局按钮都是ToolButton,还有QListWidget,QTabWidget,QToolBox,QCheacBox,lineEdit,lable标签,再加个主工具栏构成](https://img-blog.csdnimg.cn/20191031132013233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk5MjE3MQ==,size_16,color_FFFFFF,t_70)
最新回复(0)