带有单选按钮的QListWidgetItem

4

我正在着手开发我的第一个QT应用程序,但在QListWidgetItems方面遇到了问题。

我将使用不同类型的列表。对于复选框列表,请使用以下方法:

listElement[i]->setFlags(Qt::ItemIsEnabled);

listElement[i]->setCheckState(Qt::Unchecked);

它完全按照预期运作。

但现在我想要一个单选按钮列表。所以我的问题分为两个部分。

  1. can use the same logic that I used for checkBox to create Radio Buttons?
  2. I have used:

    listElement[i]->setFlags(Qt::ItemIsEnabled);
    
    QRadioButton *radio1 = new QRadioButton(0);
    
    dlList->setItemWidget(listElement[i],radio1);
    

这将显示列表中带有单选按钮的项目,问题是文本覆盖了单选按钮:

尝试演示而不使用图像

这是一个测试
o
对于元素1

相反,对于复选框,我有

   This is a test  

[]

   for element 1

如何使单选按钮与文本正确对齐?

新问题:

非常感谢您的答案,现在我的文本已经与单选按钮相邻了。

唯一的问题是没有自动换行,我的文本长度超过了单选按钮的最大大小。如何实现自动换行:

rButton = new QRadioButton();

rButton->setFixedSize(LIST_TEXT_WIDTH_WO_ICON, LIST_TEXT_HEIGHT);

rButton->setStyleSheet("border:none");

rButton->setFont(segoe18Font);

rButton->setText("This is just a test for elementsss of type euh!!!");

rButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);

dropListWidget->setItemWidget(listElement, rButton);
1个回答

7
如你所读,有两种方法可以实现你想要的功能。
1. 最灵活的方法:使用 QListView,必要时实现新的委托和模型。 2. 继续使用经典的基于项的界面(QListWidget),通过子类化 QListWidgetItem 或调用 QListWidgetItem::setItemWidget 来更改项的小部件。
由于问题指向第二个方法,我将尝试提供最简单的基于项的解决方案。
以下代码段生成了图片中的列表小部件。
QListWidgetItem *it;

it = new QListWidgetItem(ui->listWidget);
ui->listWidget->setItemWidget(it, new QRadioButton(tr("Item 1")));

it = new QListWidgetItem(ui->listWidget);
ui->listWidget->setItemWidget(it, new QRadioButton(tr("Item 2")));

// .
// .
// .

it = new QListWidgetItem(ui->listWidget);
ui->listWidget->setItemWidget(it, new QRadioButton(tr("Item N")));

这里的 ui->listWidget 是指向包含项目的 QListWidget 的指针。

希望这可以帮到您。据我所知,这就是您需要的内容。


1
谢谢,它有效了,我已经添加了原始问题的第二部分。 - DavidG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接