QT的基本控件的焦点定位及切换初始化控件的样式(按键-单选-多选-标签-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();htmlborder
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; }
欢迎批评指正,,谢谢,,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论