Qt - виджет - обновление - PullRequest
       5

Qt - виджет - обновление

1 голос
/ 01 сентября 2010

У меня есть виджет с кнопкой.Хочу, чтобы при каждом нажатии на кнопку в виджет добавлялась одна метка.Я даю код ниже, но не работает.Я не знаю почему.Кто-нибудь мне поможет?

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 ]

5 голосов
/ 01 сентября 2010

Новый QLabel действительно добавляется в EditThingsWindow каждый раз, когда вы нажимаете на кнопку.Однако, поскольку метки не размещаются в макете и все они перемещаются в одну и ту же позицию с одним и тем же текстом (отсюда и одинаковый размер), все они появляются друг над другом, и вы можете видеть только верхнюю часть,Возможно, именно поэтому вы думаете, что они не добавляются.

Добавьте макет в виджет EditThingsWindow и добавьте каждый новый QLabel в макет, и вы увидите, что все метки появляются.

2 голосов
/ 01 сентября 2010

Просто добавьте макет и поместите в него ваши новорожденные ярлыки.

 QHBoxLayout *layout = new QHBoxLayout; // or some another QLayout descendant
 layout->addWidget(newWidget);

 widget->setLayout(layout);

единственное место, которое мне пришлось изменить, это добавить макет в виджет, а затем

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...