我正在使用带按钮的小部件。我想,每按一下按钮,就会在小部件中添加一个标签。我给出了下面的代码,但是没有用。我不知道为什么。有人帮帮我吗?
class EditThingsWindow:public QWidget
{
Q_OBJECT
QPushButton * add;
public:
EditThingsWindow();
public slots:
void addButtonClicked();
};
EditThingsWindow::EditThingsWindow():QWidget()
{
QWidget* wid = this;
wid->resize(400,400);
add=new QPushButton(wid);
add->setText("Add");
add->move(20,10);
line=new QLineEdit(wid);
line->move(30,50);
QObject::connect(add,SIGNAL(clicked()),this,SLOT(addButtonClicked()));
}
void EditThingsWindow::addButtonClicked()
{
QLabel* label = new QLabel(this);
label->move(200,160);
label->setText(";;;;;;;;;;;;;;");
}
答案 0 :(得分:5)
每次单击按钮时,都会在EditThingsWindow中添加新的QLabel。但是,由于标签没有放置在布局中,并且它们都在相同的位置移动了相同的文本(因此大小相同),它们都显示在彼此的顶部,而你只能看到顶部的一个,这可能就是为什么你认为它们没有被添加。
将一个布局添加到EditThingsWindow小部件,并将每个新的QLabel添加到布局中,您将看到所有标签都出现。
答案 1 :(得分:2)
只需添加布局并将新生儿标签放入其中。
QHBoxLayout *layout = new QHBoxLayout; // or some another QLayout descendant
layout->addWidget(newWidget);
widget->setLayout(layout);
我唯一需要改变的地方是在Widget中添加布局,然后再添加
void EditThingsWindow::addButtonClicked()
{
QLabel * label=new QLabel(this);
layout->addWidget(label);
label->move(200,160);
label->setText(";;;;;;;;;;;;;;");
}
完成任务。
如果你必须(你没有!)搞绝对定位,你应该自己做所有这些样板代码。标题和包括省略。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
EditThingsWindow w(0);
w.show();
return a.exec();
}
EditThingsWindow::EditThingsWindow(QWidget *parent):QWidget(parent)
{
i = 0;
setGeometry(2, 2, 400, 400);
add=new QPushButton(this);
add->setGeometry(2, 2, 100, 20);
add->setText("Add");
add->move(20,10);
QObject::connect(add,SIGNAL(clicked()),this,SLOT(addButtonClicked()));
}
void EditThingsWindow::addButtonClicked()
{
QLabel * label=new QLabel(this);
label->setGeometry(10, 30 + i* 30, 50, 20);
i++;
label->setText(";;;;;;;;;;;;;;");
label->show();
}