Qt - 小部件 - 更新

时间:2010-09-01 14:18:08

标签: c++ user-interface qt

我正在使用带按钮的小部件。我想,每按一下按钮,就会在小部件中添加一个标签。我给出了下面的代码,但是没有用。我不知道为什么。有人帮帮我吗?

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(";;;;;;;;;;;;;;");
 }

2 个答案:

答案 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();
}