QT c++ 在当前窗口创建一个按钮列表,并设置列表大小,列表无背景图片透明,使用循环创建28个按钮添加到列表中
时间: 2024-09-12 08:10:19 浏览: 42
在QT C++中,你可以使用`QListView`或者`QHBoxLayout`结合`QPushButton`来创建一个透明无背景的按钮列表。这里我将给出如何使用`QHBoxLayout`的示例,因为它比较简单直接。如果需要更复杂的列表视图,那么`QListView`或者`QStackedLayout`是更好的选择。
首先,确保包含了所需的头文件:
```cpp
#include <QApplication>
#include <QWidget>
#include < QHBoxLayout>
#include < QPushButton>
#include <QPaintEvent>
```
然后,定义一个自定义窗口类,其中包含按钮列表:
```cpp
class TransparentWindow : public QWidget {
public:
TransparentWindow(QWidget *parent = nullptr)
: QWidget(parent), buttonLayout(new QHBoxLayout(this)) {
setAttribute(Qt::WA_TranslucentBackground, true); // 设置透明背景
setLayout(buttonLayout);
createButtons();
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
painter.fillRect(rect(), QColor(0, 0, 0, 0)); // 画透明背景
}
private:
void createButtons() {
const int buttonCount = 28;
for (int i = 0; i < buttonCount; ++i) {
QPushButton *button = new QPushButton(tr("Button " + QString::number(i+1)), this);
button->setStyleSheet("background-color: transparent; border: none;"); // 设置无背景和边框
buttonLayout->addWidget(button);
}
setFixedSize(buttonLayout->sizeHint());
}
signals:
void buttonClicked(int index);
public slots:
void handleButtonClick(int index) {
emit buttonClicked(index); // 你可以在这里添加按钮点击的处理逻辑
}
};
```
在这个例子中,我们创建了一个名为`TransparentWindow`的类,设置了窗口的背景透明,使用了`QHBoxLayout`来管理按钮。每个按钮都设置了无背景颜色并且没有边框。我们通过循环创建28个按钮并将它们添加到布局中。为了监听按钮点击事件,你可以添加一个`handleButtonClick`槽函数,或者在按钮上连接一个信号,如`buttonClicked`。
创建主窗体并显示按钮列表:
```cpp
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TransparentWindow window;
window.show();
return app.exec();
}
```
当你运行这个程序,会在窗口中看到一个无背景透明的按钮列表,每个按钮都有数字标签。点击按钮时可以根据实际情况处理事件。
阅读全文