Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Сентябрь 23, 2010, 13:48



Название: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 13:48
Всем привет. Есть ли такой класс или что нужно сделать чтобы в QlistWidget слева от каждого элемента был checkBox? Можно конечно использовать
Код:
QTreeWidget
с
Код:
TreeWidgetItem
c
Код:
item->setCheckState(0, Qt::Checked);
но интересно насчет QListWidget. Наглядный пример: QtCreator->Инструменты->Параметры->Справка->Фильтры-> GroupBox "Разделы". Заранее спасибо.


Название: Re: QListWidget c QCheckBox
Отправлено: Kolobok от Сентябрь 23, 2010, 14:09
Qt::CheckStateRole


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 14:21
А можно поподробнее?


Название: Re: QListWidget c QCheckBox
Отправлено: Kolobok от Сентябрь 23, 2010, 14:42
Код:
QListWidgetItem *item = new QListWidgetItem;
item->setData(Qt::DisplayRole, "text");
item->setData(Qt::CheckStateRole, Qt::Checked);
ui->listWidget->addItem(item);

Не надо бояться(лениться) пробовать.


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 14:49
Спасибо. Я просто до сих пор не могу понять что такое роли, поэтому и не нашел. Спасибо за терпение  :)


Название: Re: QListWidget c QCheckBox
Отправлено: NicK от Сентябрь 23, 2010, 14:53
того же можно добиться от связки QListView + QStandardItemModel


Название: Re: QListWidget c QCheckBox
Отправлено: Kolobok от Сентябрь 23, 2010, 15:12
Роли это свойства элемента.


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 15:19
Еще вопросик. Я еще только разбираюсь в тонкостях С++ и прошу помочь. Чем отличаются:

Код:
QListWisget* widget = new QListWidget;
QListWidget* widget = new QListWidget(this);
QListWidget* widget = new QListWidget();


Название: Re: QListWidget c QCheckBox
Отправлено: Kolobok от Сентябрь 23, 2010, 15:26
Если у виджета нет родителя, он будет top level widget. И это тонкости Qt.


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 15:31
И что это значит? То что он будет перекрывать все остальные виджеты?

А.. Вспомнил:
Код:

class Class1
{
Class1(){};
~Class1();
}
Class1 n1;
Class1* n1 = new Class1();


Название: Re: QListWidget c QCheckBox
Отправлено: Kolobok от Сентябрь 23, 2010, 15:40
Достаточно посмотреть описание конструктора QWidget.

Цитировать
QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 )
Constructs a widget which is a child of parent, with widget flags set to f.
If parent is 0, the new widget becomes a window. If parent is another widget, this widget becomes a child window inside parent. The new widget is deleted when its parent is deleted.


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 23, 2010, 15:41
Ясно, спасибо.


Название: Re: QListWidget c QCheckBox
Отправлено: Astrologer от Сентябрь 25, 2010, 09:30
Код:
QListWisget* widget = new QListWidget;
QListWidget* widget = new QListWidget();

Есть какая нибудь разница между этими строками?
Объект создается в стеке?


Название: Re: QListWidget c QCheckBox
Отправлено: Пантер от Сентябрь 25, 2010, 12:55
Разницы нет. Создается в куче. Парента обязательно указывай.