有伸手嫌疑!
描述中的"列表" 是啥玩意?Widget中的QListWidget ,还是Qml中的 LIstView?
新人好歹要把问题说清楚,否则老鸟们理都不理你的。可以找找“提问的智慧”一类的文章看看。
Qt本来用的人就少,我决定还是对新人友好一点。
下面这段是连续生成10个QPushButton的代码,已经有不少知识点了:
const int verticalOffset = 50; //垂直方向间隔
const int buttonWidth = 80;
const int buttonHeight = 30;
const int startX = 10; //起始x坐标
const int startY = 10; //起始y坐标
for (int i = 0; i < 10; ++i) {
//每次new一个按钮,设置不同的title,并设定parent,这里的this指代QWidget相关类。不设置会内存泄露哦。
auto btn = new QPushButton(QString("Button %1").arg(i), this);
//设置坐标 (startX, startY + verticalOffset * i)是竖直布局,
//改成(startX + verticalOffset * i,startY)就是水平布局
btn->setGeometry(startX, startY + verticalOffset * i, buttonWidth, buttonHeight);
// 连接信号,用到了QObject::connect和C++11的lambda
connect(btn, &QPushButton::clicked, this, [&, i] (){
qWarning() << "button clicked" << i;
});
}
再来说说QListWidget,往这里面添加东西需要用的是这个api
void QListWidget::addItem(QListWidgetItem *item)
而你需要添加的是按钮,那么你需要自己实现一个子类,继承QListWidgetItem和QPushButton,然后把它当做QListWidgetItem用就可以了。
这种需要先要懂C++ 基础,再看看Qt的API就会了。
再给你一个qml版本的:
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
readonly property int verticalOffset:50;
readonly property int buttonWidth : 80;
readonly property int buttonHeight : 30;
readonly property int startX : 10;
readonly property int startY : 10;
Repeater {
model: 10
Button {
x: startX
y: startY + verticalOffset * index
text: "Button" + index
onClicked: {
console.log("Button ", index, "clicked");
}
}
}
}