QT的基本控件的焦点定位及切换

14 篇文章 0 订阅

初始化控件的样式(按键-单选-多选-标签-QTableWidget-QDateTime)

	//红框为焦点选中状态
 	ui->btn->setStyleSheet("QPushButton::focus {border: 3px solid #de291f; }");
    ui->box->setStyleSheet("QCheckBox::focus {border: 3px solid #de291f; }");
    ui->rbtn->setStyleSheet("QRadioButton::focus {border: 3px solid #de291f; }");
    ui->tbtn->setStyleSheet("QToolButton::focus {border: 3px solid #de291f; }");
    ui->lab->setStyleSheet("QLabel::focus {border: 3px solid #de291f; }");
    
	//QTableWidget设置红框为选中状态   行选中为红色背景
    ui->twdgt->setStyleSheet("QTableWidget::focus {border: 3px solid #de291f;}"
                             "QTableWidget{selection-background-color: red;}");
    ui->twdgt->verticalHeader()->hide();			//隐藏竖直标题
    ui->twdgt->horizontalHeader()->setSectionsClickable(false);//横向标题不可单机(重点)
    ui->twdgt->setSelectionBehavior(QAbstractItemView::SelectRows);//选择一行
    ui->twdgt->setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
    
    //QDateTime  设置 选中框为红色方框  选中内部颜色为红色  上键背景颜色为红色  下键背景颜色为黑色
    ui->dtedit->setStyleSheet("QDateTimeEdit::focus{border: 3px solid #de291f;}"
                              "QDateTimeEdit{selection-background-color: red;}"
                              "QDateTimeEdit::up-button{background-color: red;}"
                              "QDateTimeEdit::down-button{background-color: black;}");
   //可以设置QPushButton为没有焦点-不可以选中状态
    ui->btnUp->setFocusPolicy(Qt::NoFocus);                           
    ui->btnCen->setFocusPolicy(Qt::NoFocus);
    ui->btnCen->setStyleSheet("QPushButton::focus {border: 3px solid #de291f;}");

焦点切换按键

通过按键进行切换各个控件的焦点(选中状态),需要用到

hasFocus()    是否被选中   (false:否  true:是)
setFocus()    设置为选中状态

首先在初始化的时候,设置一个控件为选中状态及

ui->box->setFocus();		//设置多选按键为选中状态

其次通过单机事件进行切换即可

void simulationRemote::on_btnUp_clicked()
{

    if(ui->box->hasFocus())
    {
        ui->lab->setFocus();
    }
    else if(ui->lab->hasFocus())
    {
        ui->twdgt->setFocus();
    }
    else if(ui->twdgt->hasFocus())
    {
        ui->btn->setFocus();
    }
    else if(ui->btn->hasFocus())
    {
        ui->tbtn->setFocus();
    }
    else if(ui->tbtn->hasFocus())
    {
        ui->rbtn->setFocus();
    }
    else if(ui->rbtn->hasFocus())
    {
        ui->dtedit->setFocus();

        ui->dtedit->setCurrentSectionIndex(5);
    }
    else if(ui->dtedit->hasFocus())
    {
        if(flagCent_dtedit == true)
        {
			ui->dtedit->stepUp();		//做 上键使用
        }
        else
        {
            ui->box->setFocus();
        }

    }
    else
    {
        if(flagCent_twdgt == true)
        {
            ui->twdgt->selectRow((++cntTwdgt % ui->twdgt->rowCount()));
            if(cntTwdgt >= ui->twdgt->rowCount())
            {
                cntTwdgt = 0;
            }
        }

    }

}
重点

PS:最主要的是QDateTime中的年/月/日 时:分:秒 的单个选择,以及上下按键的实现
这里面主要总结以下测试函数:

ui->dtedit->stepUp();		//当选中 单个元素(比如说 年),每次触发+1 -->有大小值范围-->相当于单机 上键
ui->dtedit->setpDown();	//同上,相当于单机 下键
//通过索引来选择QDateTime中的 单个元素  上述有6个元素(年/月/日 时:分:秒)
ui->dtedit->setCurrentSectionIndex((++cntDtedit % ui->dtedit->sectionCount()));   

QDateTime的向右切换 单个元素

//右
void simulationRemote::on_btnRight_clicked()
{
    if(flagCent_dtedit == true)
    {
        ui->dtedit->setCurrentSectionIndex((++cntDtedit % ui->dtedit->sectionCount()));
        ui->dtedit->stepBy(0);      //显示选中状态
        if(cntDtedit >= 6)
        {
            cntDtedit = 0;
        }
    }
}

选中之后进入和退出 QTableWidget和QDateTime单机事件

//中    选中进行元素
void simulationRemote::on_btnCen_clicked()
{
    //进入QTableWidget
    if(ui->twdgt->hasFocus())
    {
        ui->twdgt->clearFocus();
        ui->twdgt->selectRow(0);    //选择首行
        flagCent_twdgt = true;
    }
    //进入QDateTimeEdit
    else if(ui->dtedit->hasFocus())
    {
        ui->dtedit->setCurrentSection(QDateTimeEdit::YearSection);
        ui->dtedit->stepBy(0);
        flagCent_dtedit = true;
    }


    qDebug()<<"dedit--twdget:"<<flagCent_dtedit<<"---"<<flagCent_twdgt;
}
//返回  退出元素
void simulationRemote::on_btnzBack_clicked()
{
    //退出QTableWidget
    if(flagCent_twdgt == true)
    {
        ui->twdgt->setFocus();
        ui->twdgt->clearSelection();
        flagCent_twdgt = false;
    }
    //退出QDateTimeEdit
    else if(flagCent_dtedit == true)
    {
        ui->dtedit->setFocus();
        ui->dtedit->setCurrentSectionIndex(5);
        flagCent_dtedit = false;
    }

    qDebug()<<"dedit--twdget:"<<flagCent_dtedit<<"---"<<flagCent_twdgt;
}

文件资源可以通过百度云下载----
链接: https://pan.baidu.com/s/15cdSQzwyHAGvUNj-DW95Tg
提取码: yfdy

欢迎批评指正,,谢谢,,

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Qt中,方向键可以用于控制焦点在不同控件之间切换。在默认情况下,焦点可以通过Tab键在控件之间切换,而方向键可以改变焦点的默认行为。 当用户按下方向键时,Qt会根据当前焦点所在的控件和按下的方向键来确定下一个焦点应该是哪个控件。例如,如果当前焦点在一个文本框中,按下向下方向键,焦点可能会切换到下一个可接受焦点控件,例如下一个文本框或者一个按钮。同样地,按下向上、向左或者向右方向键时,焦点会在可接受焦点控件之间切换。 在Qt中,可以通过重写控件focusInEvent()或者focusOutEvent()函数来处理焦点切换时的事件。在这些事件中,可以根据需要来修改控件的样式或者执行其他自定义操作。可以利用Qt的事件过滤器机制来拦截和处理特定的焦点切换事件。 此外,Qt还提供了一些属性和函数来控制焦点切换的顺序和规则。使用QWidget的setFocusPolicy()函数可以设置控件接受焦点的策略,例如设置为Qt::StrongFocus表示控件可以接受焦点,并且方向键可以改变焦点。此外,可以使用QWidget的setTabOrder()函数来设置控件之间的Tab键切换顺序,从而影响焦点切换时的方向键切换行为。 总之,Qt提供了灵活而强大的机制来处理方向键控制焦点的功能,开发者可以根据自己的需求来定制焦点切换的行为和样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值