gpt4 book ai didi

c++ - QComboBox with QTableView,弹出组合框项目时选择或焦点问题

转载 作者:行者123 更新时间:2023-11-30 04:55:31 24 4
gpt4 key购买 nike

我使用 QTableView 更改了组合框项目的标准 View 。

问题是选择的设置。我为 View 设置了 QAbstractItemView::SelectRows,当我将光标悬停在 QTableView 的行上时它工作正常(参见 setup_table_view 和图 2 ).

但是当组合框打开并且我没有将光标移动到组合框项目时,我会在一列的单元格上看到选择(使用 setModelColumn 定义,参见图 1)。

我尝试使用选择模式选项但没有成功。

那么,如何设置我的程序以在我单击并弹出组合框时选择整行(以获取图 2 的结果以及图 1 的光标位置)?

附言为了更好的对比度,我将光标设为棕色。


图片。 1:鼠标光标在点击发生的地方。

0_1540454500496_11.PNG

图片。 2:鼠标光标移动到第一行。

1_1540454500496_22.PNG


这是一个简化的代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

QStandardItemModel *model = get_model(); // here I get the model (see below).

QTableView *cbxView = new QTableView(this);

// I define the model for the view to set static column width
cbxView->setModel(model);

setup_table_view(cbxView); // set view prorerties (see below)

// set up my combobox with model and view
ui->comboBox->setModelColumn(1);
ui->comboBox->setView(cbxView);
ui->comboBox->setModel(model);
}

/*
* Here I set up the view properties
*/
void setup_table_view(QTableView * view)
{
view->setSelectionMode(QAbstractItemView::SingleSelection);

// I said about the the line below in problem description
view->setSelectionBehavior(QAbstractItemView::SelectRows);

view->setColumnWidth(0, 30);
view->horizontalHeader()->setStretchLastSection(true);
view->verticalHeader()->setStretchLastSection(true);

view->verticalHeader()->hide();
view->horizontalHeader()->hide();
}

/*
* My model stub (for example). You can skip it.
* It is not important. But maybe it can be useful for someone.
*/
QStandardItemModel* get_model()
{
QString names[] = {"Alex", "Tim", "Mary", "Ben", "Nicole", "Max"};
QString indexes[] = {"1", "3", "6", "5", "4", "2"};
QString addresses[] = {
"Alex address", "Tim address", "Mary address",
"Ben address", "Nicole address", "Max address"
};

QStandardItemModel *model = new QStandardItemModel;

for(int i = 0; i < 6; i++)
{
model->setItem(i, 0, new QStandardItem(indexes[i]));
model->setItem(i, 1, new QStandardItem(names[i]));
model->setItem(i, 2, new QStandardItem(addresses[i]));
}

return model;
}

最佳答案

您需要重新实现 QTableView 并覆盖 showEvent

void MyTable::showEvent(QShowEvent *e)
{
if (e->type() == QShowEvent::Show)
{
this->selectRow(0);
}
}

并将此类设置为组合框的 View

关于c++ - QComboBox with QTableView,弹出组合框项目时选择或焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52987138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com