void QListWidget::setItemWidget(QListWidgetItem * item, QWidget * widget)
Sets the widget to be displayed in the given item.
This function should only be used to display static content in the place of a list widget item. If you want to display custom dynamic content or implement a custom editor widget, use QListView and subclass QItemDelegate instead.
上面的翻译:
该函数应该只用来在一个list widget item位置显示静态内容。如果你想要显示自定义动态内容或实现一个自定义编辑控件,使用QListView和子类化QItemDelegate代替。
往QListView中添加条目需借助QAbstractListModel:如:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this)
QStringListModel* slm = new QStringListModel(this)
QStringList* sl = new QStringList()
sl->append("asdfsadfsa")
sl->append("asdfsadfsa")
sl->append("asdfsadfsa")
slm->setStringList(*sl)
ui->listView->setModel(slm)
delete sl
}
而在QListWidget中添加条目可以直接additem
如:
QListWidget list
list.setViewMode(QListWidget::IconMode )
list.setResizeMode(QListWidget::Adjust)
list.setMovement(QListWidget::Static)
for(int i =0i <100 i ++){
QListWidgetItem *item = new QListWidgetItem(&list)
QStyle::StandardPixmap sp = (QStyle::StandardPixmap)(i % 57)
item->setData(Qt::DecorationRole, qApp->style()->standardPixmap(sp).scaled(QSize(16,16), Qt::KeepAspectRatio, Qt::SmoothTransformation) )
item->setData(Qt::DisplayRole,QObject::tr("Item %1").arg(i))
}
我们可以通过信号和槽的方式对列表控件的选项进行响应,例如
connect(list, SIGNAL(currentTextChanged(QString)), this, SLOT(setText(QString)))
总之,QListWidget是继承QListView,QListView是基于model的,需要自己来建模(例如建立QStringListModel、QSqlTableModel等),保存数据,这样就大大降低了数据冗余,提高了程序的效率,但是需要我们对数据建模有一定了解,初学者就先不要考虑了,而QListWidget是一个升级版本的QListView,它已经自己为我们建立了一个数据存储模型(QListWidgetItem), *** 作方便,直接调用addItem即可添加项目(ICON,文字)。
先创建一个QWidget,然后对这个QWidget设置布局,然后往布局里添加你的按钮,最后把这个QWidget设置到item上嗯哈。
QWidget *container = new QWidget
container->addLayOut(xxxx)
container->addWidget(xxxWidget)
item->setItemWidget(containter)
//这个container完全可以用Desinger去做哈。高效快捷~
QTableWidget * tvDecoderItemArea = new QTableWidget(this)
tvDecoderItemArea->setObjectName("tvDecoderItemArea")
tvDecoderItemArea->setColumnCount(1)
tvDecoderItemArea->horizontalHeader()->setVisible(false)
tvDecoderItemArea->verticalHeader()->setVisible(false)
tvDecoderItemArea->horizontalHeader()->setStretchLastSection(true)
int index = tvDecoderItemArea->rowCount()
tvDecoderItemArea->setRowCount(index+1)
QPushButton* pItem = new QPushButton(tr("text_%1").arg(index+1))
tvDecoderItemArea->setCellWidget(index,0,pItem)
QListWidget::setItemWidget
QWidget是一个包裹,它占据Item的所有空间
可能是你的布局没有调整边距所致,在你这两个布局上设置setContentsMargins(0, 0, 0, 0)
似乎是使用QStyledItemDelegate这个来实现?求教如何使用?有没有例子?
使用QListWidget::setItemWidget时,如何对item进行布局?现在控件加进去了,但是都重叠在一起了。
这个QWidget在Item里面的位置如何调整?
,,这样那我把所有的东西,包括item的text、ICON都放入这个QWidget了?
listWidget->setResizeMode(QListView::Adjust)
listWidget->setGridSize(QSize(165,176))
listWidget->setIconSize(QSize(158,117))
listWidget->setViewMode(QListView::IconMode)
listWidget->setWordWrap(true)
listWidget->setAutoScroll(true)
mItem = new QListWidgetItem(listWidget)
mLayoutWidget = new QWidget(listWidget)
mVLayout = new QVBoxLayout(mLayoutWidget)
mHLayout = new QHBoxLayout()
QLabel *showPic = new QLabel(mLayoutWidget)
QPixmap pixMap(QString(":/b_1243700182001.jpg"))
showPic->setPixmap(pixMap)
mVLayout->addWidget(showPic)
QLabel *showName = new QLabel(text,mLayoutWidget)
mVLayout->addWidget(showName)
mDeleteBt = new QPushButton(mLayoutWidget)
mDetailBt = new QPushButton(mLayoutWidget)
mUploadBt = new QPushButton(mLayoutWidget)
mHLayout->addWidget(mDeleteBt)
mHLayout->addWidget(mDetailBt)
mHLayout->addWidget(mUploadBt)
mVLayout->addLayout(mHLayout)
mLayoutWidget->setLayout(mVLayout)
mLayoutWidget->show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)