QT 5.9 93页例子

头文件

`#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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值