Я изменил стандартное представление элементов комбинированного списка, используя QTableView .
Проблема в с настройкой выбора.Я установил QAbstractItemView::SelectRows
для вида, и он отлично работает, когда я наведу курсор на строки QTableView (см. setup_table_view
и рис. 2).
Но когда открывается поле со списком, и яне перемещайте курсор к элементам комбинированного списка, тогда я вижу выделение в ячейке одного столбца (который определяется с помощью setModelColumn
, см. рис. 1).
Я пытался поиграть с параметрами режима выделения, но безуспешно.
Итак, как я могу настроить свою программу на выбор полной строки, когда я нажму и всплывающее окно со списком (чтобы получить результат Рис. 2 с положением курсора Рис. 1)?
PS Я сделал курсор коричневым для лучшей контрастности.
Рис.1: курсор мыши в том же месте, где произошел щелчок.
Рис.2: курсор мыши был перемещен в 1-й ряд.
Вот упрощенный код:
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;
}