目前的焦点策略

目前的焦点策略

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(400,600);
    ui->tableWidget->resize(200,300);
    ui->tableWidget_2->resize(200,300);
    //隐藏水平头
    ui->tableWidget->horizontalHeader()->setHidden(true);
    ui->tableWidget_2->horizontalHeader()->setHidden(true);
    //设置垂直表头不可用
    ui->tableWidget->verticalHeader()->setSectionsClickable(false);
    ui->tableWidget_2->verticalHeader()->setSectionsClickable(false);
    //设置列的宽度
    ui->tableWidget->verticalHeader()->setMinimumWidth(70);
    ui->tableWidget->setColumnWidth(0,70);
    ui->tableWidget_2->verticalHeader()->setMinimumWidth(70);
    ui->tableWidget_2->setColumnWidth(0,70);
    //初始化两个表
    for(int rows=0;rows<ui->tableWidget->rowCount();rows++)
    {
        for(int columns=0;columns<ui->tableWidget_2->columnCount();columns++)
        {
            ui->tableWidget->setItem(rows,columns,new QTableWidgetItem("linshi"));
            //设置文件居中
            ui->tableWidget->item(rows,columns)->setTextAlignment(Qt::AlignCenter);
        }
    }
    for(int rows=0;rows<ui->tableWidget_2->rowCount();rows++)
    {
        for(int columns=0;columns<ui->tableWidget_2->columnCount();columns++)
        {
            ui->tableWidget_2->setItem(rows,columns,new QTableWidgetItem("linshi"));
            //设置文字居中
            ui->tableWidget_2->item(rows,columns)->setTextAlignment(Qt::AlignCenter);
        }
    }
    QTableWidgetItem *itemT=NULL;
    //设置某行某列不可编辑
//    for(int rows=0;rows<ui->tableWidget->rowCount();rows++)
//    {
//        for(int columns=0;columns<ui->tableWidget->columnCount();columns++)
//        {
//            if(1 == rows%2)
//            {
//                itemT=ui->tableWidget->item(rows,columns);
//                itemT->setFlags(itemT->flags()&~Qt::ItemIsEnabled);
//            }

//        }
//    }
    //焦点策略
    //设置某个控件为选中状态
    //初始化设置某个控件为选中状态
    ui->tableWidget->setFocus();
    //设置红框为选中状态,行选中为红色背景
//    ui->tableWidget->setStyleSheet("QTableWidget::focus {border: 3px solid #de291f;}"
//                                   "QTableWidget{selection-background-color:red;}");
    /*解释:前者表示焦点策略:border:边界占用三个像素,实线,颜色数值*/
    //选择一行
    //ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    //只能单选
    //ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);

    //设一个焦点不可选中状态
    //ui->btn1->setFocusPolicy(Qt::NoFocus);
    //焦点切换按键
    /*需要用到:hasFocus()是否被选中
    setfocus() 设置为选中状态*/
    //首先通过单机事件进行切换
    //ui->tableWidget->setFocus();
    //重点QDateTime中的年/月/日 时:分:秒的单个选择,以及上下按键的实现
    /*stepUp()、stepDown()
    并且通过索引来选择单个元素*/

    //设置焦点策略
    //1、设置聚焦策略
    this->setFocusPolicy(Qt::StrongFocus);
    //设置首个焦点选中
    //ui->tableWidget->setFocus();//处于焦点状态
    //ui->tableWidget->setStyleSheet("QTableWidget::focus{border:3px solid #CFCFCF");
    //设置button为tabfocus
    //设置选中框为红色方框,选中内部颜色为红色,上键背景为红色,下键背景为黑色
    ui->tableWidget->setStyleSheet("QTableWidget::focus{border:3px solid #0000ff;}"
                                     "QTableWidget{selection-background-color:green;}"
                                     "QTableWidget::up-button{background-color:red;}"
                                     "QTableWidget::down-button{background-color:black;}");
    ui->tableWidget_2->setStyleSheet("QTableWidget::focus{border:3px solid #de2916;}"
                                     "QTableWidget{selection-background-color:red;}"
                                     "QTableWidget::up-button{background-color:red;}"
                                     "QTableWidget::down-button{background-color:black;}");
    ui->btn1->setFocusPolicy(Qt::TabFocus);
    ui->btn1->setStyleSheet("QPushButton::focus{background-color:blue;}");
        ui->btn1_2->setStyleSheet("QPushButton::focus{background-color:black;}");
    //安装事件过滤器
    ui->tableWidget->installEventFilter(this);
    ui->tableWidget_2->installEventFilter(this);
    ui->btn1->installEventFilter(this);
    ui->btn1_2->installEventFilter(this);


}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_btn1_clicked()
{
    if(ui->tableWidget->hasFocus())
    {
        ui->tableWidget_2->setFocus();
    }else if(ui->tableWidget_2->hasFocus())
    {
        ui->tableWidget->setFocus();
        //设置索引焦点

    }
}

void Widget::on_btn1_2_clicked()
{
    ui->dateTimeEdit->setCurrentSectionIndex(++m_cntDtedit%ui->dateTimeEdit->sectionCount());
    //显示选中状态
    ui->dateTimeEdit->stepBy(0);
    if(m_cntDtedit>=6)
    {
        m_cntDtedit=0;
    }
}
//退出选中状态
void Widget::quit()
{
    ui->tableWidget->setFocus();

}

bool Widget::eventFilter(QObject *obj, QEvent *evt)
{
    if(obj==ui->tableWidget||obj==ui->tableWidget_2||obj==ui->btn1
            ||obj==ui->btn1_2)
    {
        if(evt->type()==QEvent::KeyPress)
        {
            //将事件转化为键盘事件
            QKeyEvent *key_evt=static_cast<QKeyEvent*>(evt);
            //按下tab键执行焦点切换事件
            if(key_evt->key()==Qt::Key_Tab
                    ||key_evt->key()==Qt::Key_Down)
            {
                bool t1=ui->tableWidget->hasFocus();
                bool t2=ui->tableWidget_2->hasFocus();
                bool b1=ui->btn1->hasFocus();
                bool b2=ui->btn1_2->hasFocus();
                if(t1)
                {


                        if(ui->tableWidget->currentRow()<ui->tableWidget->rowCount()-1)
                        {
                            //ui->tableWidget->setItem(2,0,new QTableWidgetItem(QString::number(ui->tableWidget->currentRow())));
//                            focusNextChild();
                        }
                        else if(ui->tableWidget->currentRow()==ui->tableWidget->rowCount()-1)
                        {
                            ui->tableWidget->setItem(3,0,new QTableWidgetItem(QString::number(ui->tableWidget->currentRow(),10)));
                            ui->tableWidget_2->setFocus();

                            //ui->tableWidget->setFocusPolicy(Qt::NoFocus);
                                                        ui->tableWidget->clearFocus();//取出焦点
                        }



                }
                else if(t2)
                {


                        if(ui->tableWidget_2->currentRow()<ui->tableWidget_2->rowCount()-1)
                        {
//                            focusNextChild();
                        }
                        else if(ui->tableWidget_2->currentRow()==ui->tableWidget_2->rowCount()-1)
                        {
//                            ui->tableWidget_2->setItem(3,0,new QTableWidgetItem(QString::number(ui->tableWidget_2->currentRow(),10)));
                            ui->btn1->setFocus();
                        }


                }else if(b1)
                {
                    //focusNextChild();
                    ui->btn1_2->setFocus();
                }
                else if(b2)
                {
                    //focusNextChild();
                    ui->tableWidget->setFocus();
                }
            }
//        else if(key_evt->key()==Qt::Key_Up)
            {
                bool t1=ui->tableWidget->hasFocus();
                bool t2=ui->tableWidget_2->hasFocus();
                bool b1=ui->btn1->hasFocus();
                bool b2=ui->btn1_2->hasFocus();
                if(t1)
                {
                    if(ui->tableWidget->currentRow()>0)
                    {
                        focusPreviousChild();
                    }else if(ui->tableWidget->currentRow()==0)
                    {
                        ui->btn1_2->setFocus();
                    }
                }else if(t2)
                {
                    if(ui->tableWidget_2->currentRow()>0)
                    {
                        focusPreviousChild();
                    }else if(ui->tableWidget_2->currentRow()==0)
                    {
                        ui->tableWidget->setFocus();
                    }
                }else if(b1)
                {
                    ui->tableWidget_2->setFocus();
                }else if(b2)
                {
                    ui->btn1->setFocus();
                }
            }
        }
    }
    return QWidget::eventFilter(obj,evt);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值