初始化控件的样式(按键-单选-多选-标签-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
欢迎批评指正,,谢谢,,