所以我想在Qt中创建5个按钮,但是只创建一个按钮并将其放入for循环中,这样我就不必手动创建5个按钮。我尝试了不同的方法,但都证明是徒劳的。我是C ++和Qt的新手。
以下是代码;
show.h
#ifndef SHOW_H
#define SHOW_H
#include <QDialog>
#include <QPushButton>
#include <QVBoxLayout>
class Show : public QDialog {
Q_OBJECT
public:
explicit Show(QWidget *parent = 0);
~Show();
private:
QPushButton *button;
};
#endif // SHOW_H
show.cpp
#include "show.h"
#include "ui_show.h"
Show::Show(QWidget *parent) : QDialog(parent) {
int a = 5;
button = new QPushButton[a];
button->setText("Ok");
QVBoxLayout *layout = new QVBoxLayout[a];
for (int i = 0; i < sizeof(button)/4; i++) {
/*here, i wanted to do something like this;
'layout[i].addWidget(button[i]);' but didn't work*/
layout[i].addWidget(button);
}
setLayout(layout);
}
Show::~Show() {
}
的main.cpp
#include "show.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
Show *dialog = new Show;
dialog->show();
return a.exec();
}
运行代码后,我只看到一个按钮。 非常感谢您的帮助。谢谢!!
答案 0 :(得分:1)
QPushButton* pButton = new QPushButton("Ok");
这会创建QPushButton的单个实例。
您可以通过调用Layout::addWidget将该按钮添加到布局,内部调用addItem。
正如addItem的文档说明: -
注意:项目的所有权转移到布局,布局是否有责任将其删除
因此,您当前的代码会创建一个按钮,当它被添加到每个连续的布局中时,它将从之前添加的布局中删除。
您正在创建一个按钮并添加相同的按钮5次。如果你想要5个布局中的5个按钮使用循环,那么你需要5个单独的按钮实例: -
for (int i=0; i<5; ++i)
{
QPushButton* pButton = new QPushButton("Ok");
layout[i].addWidget(pButton);
}
答案 1 :(得分:0)
在show.cpp
更改行
Show::Show(QWidget *parent) : QDialog(parent) {
int a = 5;
// You only need one layout for all buttons, not one per button.
QVBoxLayout *layout = new QVBoxLayout( this );
for (int i = 0; i < a; i++) {
QPushButton * newButton = new QPushButton( this );
newButton ->setText( "Ok" );
layout->addWidget( newButton );
}
setLayout(layout);
}
Show::~Show() {
}
布局需要一个指针,你只需要一个布局而不是每个按钮一个。