Qt中,qlistwidget 实现显示三列数据,其中,第一列为复选框,第二列为ip地址,第三列为端口
时间: 2023-07-29 11:13:22 浏览: 89
可以通过继承 QListWidget 实现自定义的 QListWidgetItem,以实现每个 item 显示三列数据。
首先,定义一个继承自 QListWidgetItem 的类,例如叫做 MyItem。在 MyItem 中添加三个私有变量,分别表示复选框、ip地址和端口:
```cpp
class MyItem : public QListWidgetItem
{
public:
MyItem(QListWidget* parent = nullptr)
: QListWidgetItem(parent)
{
// 初始化复选框
checkbox = new QCheckBox(parent);
checkbox->setStyleSheet("QCheckBox::indicator {width: 20px; height: 20px;}");
parent->setItemWidget(this, checkbox);
// 初始化 ip 地址和端口
ip_address = new QLabel(parent);
port = new QLabel(parent);
ip_address->setText("");
port->setText("");
parent->setItemWidget(this, ip_address);
parent->setItemWidget(this, port);
}
void setData(const QString& ip, const QString& p)
{
// 设置 ip 地址和端口
ip_address->setText(ip);
port->setText(p);
}
bool isChecked()
{
// 返回复选框的状态
return checkbox->isChecked();
}
private:
QCheckBox* checkbox;
QLabel* ip_address;
QLabel* port;
};
```
在上述代码中,构造函数中创建了一个复选框和两个 QLabel 控件,分别用于显示 ip 地址和端口。setData 函数用于设置 ip 地址和端口的值,isChecked 函数用于返回复选框的状态。
接下来,可以使用 MyItem 类来创建 QListWidget 的 item。例如,创建一个 QListWidget,然后添加 MyItem:
```cpp
QListWidget* listWidget = new QListWidget(this);
// 添加 item
MyItem* item1 = new MyItem(listWidget);
item1->setData("192.168.0.1", "8080");
MyItem* item2 = new MyItem(listWidget);
item2->setData("192.168.0.2", "8081");
MyItem* item3 = new MyItem(listWidget);
item3->setData("192.168.0.3", "8082");
listWidget->addItem(item1);
listWidget->addItem(item2);
listWidget->addItem(item3);
```
通过上述代码,可以创建一个 QListWidget 并添加三个 item,每个 item 都显示了三列数据:复选框、ip 地址和端口。
阅读全文