Есть ли способ создать QListWidget, содержащий QTableWidget как элементы? [Дубликат]

Помните об этом при использовании ответа от Jon Skeet с таким кодом:

// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);

string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();

Вы получаете такие результаты:

23h 24m 2s
3h 24m 2s

Формат часов может максимум - 23 часа. Он не будет показывать 27 часов или конвертировать 12 дней в часы, он просто отключит их, как если бы они никогда не существовали.

Один из способов исправить это - создать расширение, которое проверяет длину TimeSpan и создает форматирование, основанное на том, если период времени превышает год, день и т. Д. Или вы могли просто показывать дни, потому что они никогда не прерывались:

string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");

Обратите внимание, что я начинаю программировать. Это происходит только из наблюдений после того, как мне посчастливилось заметить это, предположив, что это будет показывать все часы. Я говорю об этом, потому что я не знаю, есть ли лучшее решение, например, другой формат часов, который может отображать бесконечные часы.

Однако я считаю, что этот формат выполняет намеченные функции. Вы просто должны знать об этом. Таким образом, этот пост. Ответ Джона Скита никогда не указывал, что этот формат должен показывать только свойство часа формата даты, где часы могут быть не более 23.

8
задан Community 23 May 2017 в 12:26
поделиться

1 ответ

Попробуйте следующее:

itemN = QtGui.QListWidgetItem() 
#Create widget
widget = QtGui.QWidget()
widgetText =  QtGui.QLabel("I love PyQt!")
widgetButton =  QtGui.QPushButton("Push Me")
widgetLayout = QtGui.QHBoxLayout()
widgetLayout.addWidget(widgetText)
widgetLayout.addWidget(widgetButton)
widgetLayout.addStretch()

widgetLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
widget.setLayout(widgetLayout)  
itemN.setSizeHint(widget.sizeHint())    

#Add widget to QListWidget funList
funList.addItem(itemN)
funList.setItemWidget(itemN, widget)

Как вы можете видеть, вам нужно setSizeConstraint в макете, а setSizeHint - на элемент.

12
ответ дан neuronet 15 August 2018 в 19:30
поделиться
  • 1
    это работает! Мне не очень ясно, что происходит. 1) Как только ограничение размера установлено, действительно ли мне нужно setSizeHint к элементу? Он кажется , оставляя вне setSizeHint, не меняет внешний вид моего графического интерфейса. 2) Почему мой размер подсказывал по умолчанию -1, -1 в первую очередь, и как это исправить 'SetFixedSize'? Почему он просто не исправляет его при неправильном значении (-1, -1). Какие-нибудь хорошие документы переходят на все эти вопросы? (Документы включают: qt-project.org/doc/qt-4.8/qt.html#SizeHint-enum и qt-project.org/doc/qt-4.8/qlayout.html# SizeConstraint-перечисление ) – neuronet 5 October 2014 в 15:35
  • 2
    @neuronet QLayout::SetFixedSize Размер главного виджета установлен на sizeHint();, он не может быть изменен вообще. Если вы не укажете размер подсказки, ваш виджет с меткой и кнопкой будет больше, чем элемент, поэтому он будет крайне уродлив и не правильный. – Chernobyl 5 October 2014 в 15:43
  • 3
    Принимая ответ, потому что он решил проблему, но определенно будет поддерживать всех, кто объясняет все это, чтобы привести следующего человека за рамки культового программирования :) – neuronet 5 October 2014 в 18:28
Другие вопросы по тегам:

Похожие вопросы: