c++ - 获得焦点后选择所有内容
问题描述
我有以下问题,我有一个 QTableWidget,我向其中添加了一些 QDoubleSpinBox 到一些单元格,到目前为止一切都很好,我的问题是如何在更改焦点时选择旋转框的所有内容,我的意思是当按下键选项卡,当他们获得焦点时,我将不胜感激任何建议。
我留下我的代码:
void MainClass::setData(double val1, double val2,int _rowCount)
{
for (int i=0;i<= _rowCount; i++) {
int rowCount=ui->tableWidget_4->rowCount();
// ui->tableWidget_4->setRowCount(rowCount);
//primera columna
ui->tableWidget_4->insertRow(rowCount);
// qDebug()<<rowCount;
QTableWidgetItem *item=new QTableWidgetItem(QString("v %1").arg(v));
ui->tableWidget_4->setItem(rowCount,V,item);
//segunda columna columna
// ui->tableWidget_4->insertRow(rowCount);
QTableWidgetItem *item1=new QTableWidgetItem(0);
ui->tableWidget_4->setItem(rowCount,Velocidad,item1);
ui->tableWidget_4->setCellWidget(rowCount,Velocidad,new QDoubleSpinBox);
QDoubleSpinBox *sb=qobject_cast<QDoubleSpinBox *>(
ui->tableWidget_4->cellWidget(rowCount,Velocidad));
sb->setValue(val1);
// qDebug()<<item1->data(Qt::DisplayRole).toString();
//tercera columna columna
// ui->tableWidget_4->insertRow(rowCount);
QTableWidgetItem *item2=new QTableWidgetItem(QString("h %1").arg(h));
ui->tableWidget_4->setItem(rowCount,H,item2);
//cuarta columna columna
// ui->tableWidget_4->insertRow(rowCount);
QTableWidgetItem *item3=new QTableWidgetItem(val2);
ui->tableWidget_4->setItem(rowCount,Profundidad,item3);
ui->tableWidget_4->setCellWidget(rowCount,Profundidad,new QDoubleSpinBox);
QDoubleSpinBox *sb2=qobject_cast<QDoubleSpinBox *>(
ui->tableWidget_4->cellWidget(rowCount,Profundidad));
sb2->setValue(val2);
v++;
h++;
}
这里的表格
请注意,当旋转框处于焦点时,只有光标闪烁,但并非所有内容都被选中。
注意:在 setItem 的列号分配中,我使用枚举而不是列号。
枚举 ColNames{V,Velocidad,H,Profundidad};
解决方案
一种可能的解决方案是覆盖接收焦点时调用的 QDoubleSpinBox 的 focusInEvent 方法,然后选择所有文本。
class DoubleSpinBox: public QDoubleSpinBox{
public:
using QDoubleSpinBox::QDoubleSpinBox;
protected:
void focusInEvent(QFocusEvent *event){
QDoubleSpinBox::focusInEvent(event);
selectAll();
}
};
然后使用 setCellWidget 方法设置它。
您还可以避免使用 setCellWidget 方法并使用委托:
#include <QtWidgets>
#include <random>
class Helper: public QObject{
public:
Helper(QDoubleSpinBox *ds): QObject(ds), m_ds(ds){
m_ds->installEventFilter(this);
}
bool eventFilter(QObject *watched, QEvent *event){
if(watched == m_ds && event->type() == QEvent::FocusIn){
m_ds->selectAll();
}
return QObject::eventFilter(watched, event);
}
private:
QDoubleSpinBox* m_ds;
};
class Delegate: public QStyledItemDelegate{
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{
QWidget *editor = QStyledItemDelegate::createEditor(parent, option, index);
if(QDoubleSpinBox *ds = qobject_cast<QDoubleSpinBox *>(editor)){
new Helper(ds);
}
return editor;
}
};
class MainWindow: public QMainWindow{
public:
MainWindow(QWidget *parent=nullptr):
QMainWindow(parent), table(new QTableWidget)
{
table->setColumnCount(4);
table->setItemDelegate(new Delegate);
setCentralWidget(table);
}
void append(double value1, double value2){
int number_of_rows = table->rowCount();
QTableWidgetItem *item1 = new QTableWidgetItem;
item1->setText(QString("v %1").arg(number_of_rows));
QTableWidgetItem *item2 = new QTableWidgetItem;
item2->setData(Qt::DisplayRole, value1);
QTableWidgetItem *item3 = new QTableWidgetItem;
item3->setText(QString("h %1").arg(number_of_rows));
QTableWidgetItem *item4 = new QTableWidgetItem;
item4->setData(Qt::DisplayRole, value2);
table->insertRow(number_of_rows);
table->setItem(number_of_rows, 0, item1);
table->setItem(number_of_rows, 1, item2);
table->setItem(number_of_rows, 2, item3);
table->setItem(number_of_rows, 3, item4);
table->openPersistentEditor(item2);
table->openPersistentEditor(item4);
}
private:
QTableWidget *table;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle("fusion");
MainWindow w;
std::uniform_real_distribution<> dist(1.0, 2.0);
for(int i=0; i< 4; i++){
double val1 = dist(*QRandomGenerator::global());
double val2 = dist(*QRandomGenerator::global());
w.append(val1, val2);
}
w.resize(640, 480);
w.show();
return a.exec();
}
推荐阅读
- apache-spark - 从 CSV 文件中读取,但大多是 None 值
- flutter - Flutter - 在 .then() 函数之外的 getter 中检索值
- asp.net - HttpContext.Current.User.Identity.Name 不正确,但仅适用于我
- r - Levendberg-Marquard vs Port nls
- pdf - Ghostscript 将 cmyk-PDF 转换为 rgb-PNG 并保留正确的颜色
- python - 在 Python 的 SQL 语句中传递列名?
- html - 如何使下拉菜单的宽度与每个菜单相同
- 在导航?
- php - 使用 WP WC CLI 将产品批量导入 Woocommerce
- javascript - 如何将一个元素隐藏在一个较小的元素后面?
- visual-studio - VS Code (Flutter, dart) 错误在注释或删除代码后不会消失