проблема добавления QPushButton с помощью setItemWidget внутри QListWidgetItem - PullRequest
1 голос
/ 23 октября 2010

Я хочу добавить QPushButton внутри ListItm, поэтому я реализовал код, приведенный ниже. Но кнопка находится в середине списка, на самом деле я хочу, чтобы она находилась в нижней части элемента списка. Как это возможно. Также это событие нажатия кнопки не работает. На самом деле я хочу напрямую отключить событие щелчка элемента и, нажав кнопку внутри QListWidgetItem, я хочу включить событие щелчка элемента. Но я не могу выполнить эту операцию. Как это сделать? Я использовал следующий фрагмент кода:

list=new QListWidget(this);
// list->setStyleSheet("* { background-color:rgb(0,0,0); padding: 10px ; color:rgb(255,255,255)}");
list->setGeometry(0,61,360,475);
list->setSortingEnabled(true);
//connect(list,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(ItemClicked(QListWidgetItem*)));

item=new QListWidgetItem();
item->setIcon(QIcon(":/images/Icon.png"));
item->setText("Item1");
item->setSizeHint(QSize(80,80));
item->setBackgroundColor(QColor(200,255,100));

list->addItem(item);
QPushButton *but = new QPushButton(">");
but->setMaximumSize(50,80);
but->setFlat(true);
// but->setGeometry(QRect(500,100,100,100));
but->setStyleSheet("background: transparent; border: none");
QHBoxLayout *layout= new QHBoxLayout();
layout->addWidget(but);
QWidget *widget = new QWidget();
widget->setLayout(layout);
item->setSizeHint(widget->sizeHint());
list->setItemWidget(item, widget);
connect(but, SIGNAL(clicked()), this, SLOT(ItemClicked()));
#if defined(Q_WS_S60)
list->showMaximized();
#else
list->show();
#endif

ItemClicked()
{
int Index = list->currentIndex().row();//Always getting this Index as -1
}

Пожалуйста, ознакомьтесь с приведенным выше кодом и предоставьте свои предложения. Спасибо ...

1 Ответ

2 голосов
/ 24 октября 2010

Пересмотреть, используя QPushButton в качестве дескриптора «щелчка» для виджета списка.Есть причина, по которой QListWidgetItem не является QObject.QObjects несколько «тяжелые» из-за всех структур метаданных, которые они содержат.Вот почему Qt не использует QObjects в ориентированных на данные списках, таких как QListWidgetItem.

О вашей проблеме.Вы получите всегда -1, пока не выберете элемент, НЕ нажимая на его кнопку, а на элемент.Это потому, что QPushButton убирает фокус и не передает событие щелчка вниз QListWidgetItem.Так что может даже случиться, что вы выбираете элемент с idx = 3, нажимаете на кнопку элемента с idx = 1 и получаете в свой слот idx 3.

На самом деле, для меня вы исполняете весь свойТакс полностью неправильно.Прежде всего, я бы использовал QTreeWidget для многоколонок.Во-вторых, я бы «реализовал» пользовательский элемент делегата, чтобы нарисовать «кнопку», и я бы установил его в качестве делегата для столбца 1. Затем я бы обычно ловил «событие щелчка», но реагировал только на столбец 1.

| column 0 (actual data exposition) | column 1 (custom delegate, draw button)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...