Qt实现复杂的列表控件

来源:互联网 发布:中国银行软件中心 西安 编辑:程序博客网 时间:2024/04/30 03:21

http://blog.csdn.net/wangtaohappy/article/details/8810659

 

Qt实现复杂的列表控件

分类: GUI Qt 364人阅读 评论(0) 收藏 举报
QtGUIQt编程控件布局

QTCN上有人问,复杂列表控件怎么做?

控件布局如下图,求指点思路

有高手指点如下,
红框圈起来的是QLabel,1个进度条,2个按钮(toolButton),1个布局,1个QWidget(容器),组成一个widget。
放进QListWidget里。进度条用样式表美化一下,参考:http://developer.qt.nokia.com/doc/qt-4.8/stylesheet-examples.html

 

其中主要用这个函数:void QListWidget::setItemWidget(QListWidgetItem * item, QWidget * widget)  然后应用css样式美化。

类似的,如下面的界面也可以借鉴以上思路:

 

楼主试验,外面大布局可以用QListWidget,然后将listItem写成自定义的控件集合,用函数setItemWidget()加载就好。

可以将自定义的控件集单独写成一个类,然后用这个类生成表项。

代码参考如下:

 
[cpp] view plaincopyprint?
  1.   ui->alarmListWidget->setResizeMode(QListView::Adjust);  
  2.    ui->alarmListWidget->setAutoScroll(true);  
  3.      
  4.    QWidget *wContainer = new QWidget(ui->alarmListWidget);  
  5.    QHBoxLayout *hLayout = new QHBoxLayout(wContainer);  
  6.   
  7.    QLabel *alarmIcon = new QLabel(tr("beih"));  
  8.    QLabel *placeLabel = new QLabel(tr("北京"));  
  9.    QLabel *videoNumLabel = new QLabel(tr("8"));  
  10.    QLabel *dateLabel = new QLabel(tr("2013-4-16"));  
  11.    QLabel *alarmMsgLabel = new QLabel(tr("违章搭建"));  
  12.    //QPushButton *pDeleteBtn = new QPushButton(QIcon(),tr("delete"));  
  13.   
  14.    hLayout->addWidget(alarmIcon);  
  15.    hLayout->addStretch(1);//将空白没有widget的地方分成了若干份,按比例分配  
  16.    hLayout->addWidget(placeLabel);  
  17.    hLayout->addStretch(1);  
  18.    hLayout->addWidget(videoNumLabel);  
  19.    hLayout->addStretch(1);  
  20.    hLayout->addWidget(dateLabel);  
  21.    hLayout->addStretch(1);//将空白没有widget的地方分成了若干份,按比例分配  
  22.    hLayout->addWidget(alarmMsgLabel);  
  23.    hLayout->setContentsMargins(5,0,0,5);//关键代码,如果没有很可能显示不出来  
  24. // wContainer->setLayout(hLayout);//如果layout在创建时就已经将父窗口指针当参数,那就不用setlayout  
  25.    wContainer->resize(350,50);  
  26.   // wContainer->show();  
  27.   
  28.    QListWidgetItem *alarmItem = new QListWidgetItem(ui->alarmListWidget);  
  29.    ui->alarmListWidget->setItemWidget(alarmItem,wContainer);  
 

原创粉丝点击