• 8965阅读
  • 4回复

[提问]【求助】QListWidget使用setItemWidget函数插入QWidget后,无法勾选问题 [复制链接]

上一主题 下一主题
离线spring521
 

只看楼主 倒序阅读 楼主  发表于: 2013-02-25
为了实现QListWidget每行插入QLabel和QprogressBar,使用setItemWidget函数插入新构造QWidget方法。
这里想通过鼠标点击,使QListWidgetItem前面的选择框改变(checked or unchecked状态),触发itemChanged信号,进而进入SLOT函数处理
现在的问题是:QListWidgetItem前面的选择框根本无法选择的问题。



代码如下:
MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){     ui->setupUi(this);    QString str("9QJ8");    for(int i = 0 ; i < 10 ; ++i)    {    QLabel *label = new QLabel(str);    label->setFixedSize(230,60);    QProgressBar * bar = new QProgressBar;    bar->setFixedSize(150,30);    bar->setRange(0,10);    QHBoxLayout * hbox = new QHBoxLayout;    hbox->addWidget(label);    hbox->addWidget(bar);    QWidget * widget = new QWidget;    widget->setLayout(hbox);    QListWidgetItem * item = new QListWidgetItem;    item->setData(Qt::UserRole, i);    item->setSizeHint(QSize(380,60));    item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);    item->setCheckState(Qt::Checked);    ui->listWidget->addItem(item);    ui->listWidget->setItemWidget(item, widget);    str += "1";    bar->setValue(i);    }}谢谢
离线spring521

只看该作者 1楼 发表于: 2013-02-25
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString str("9QJ8");
    for(int i = 0 ; i < 10 ; ++i)
    {
    QLabel *label = new QLabel(str);
    label->setFixedSize(230,60);

    QProgressBar * bar = new QProgressBar;
    bar->setFixedSize(150,30);
    bar->setRange(0,10);

    QHBoxLayout * hbox = new QHBoxLayout;
    hbox->addWidget(label);
    hbox->addWidget(bar);

    QWidget * widget = new QWidget;
    widget->setLayout(hbox);

    QListWidgetItem * item = new QListWidgetItem;
    item->setData(Qt::UserRole, i);
    item->setSizeHint(QSize(380,60));
    item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
    item->setCheckState(Qt::Checked);
    ui->listWidget->addItem(item);

    ui->listWidget->setItemWidget(item, widget);

    str += "1";
    bar->setValue(i);
    }
}
离线spring521

只看该作者 2楼 发表于: 2013-02-25
大侠们帮忙看一下!
这个问题搞了一天了,都没搞定!

小弟拜谢了
离线pxiao_xiao

只看该作者 3楼 发表于: 2013-02-26
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.
setItemWidget( )的说明 只能显示 静态的widget内容 显然 check是个需要动态的玩意儿  
离线spring521

只看该作者 4楼 发表于: 2013-03-05
回 3楼(pxiao_xiao) 的帖子
非常感谢!
该问题已经确认,不能实现。
之前有人还将还问题提到Nokia,认为是一个bug,Nokia给出的回复是不支持该功能。
快速回复
限100 字节
 
上一个 下一个