Как динамически добавить виджет (например, QPushButton) в макет, встроенный в конструктор - PullRequest
4 голосов
/ 25 января 2011

Я пытаюсь поиграть с Qt, в основном пытаюсь переписать старое Java-приложение для symbian, и я немного запутался.

Прежде всего я должен объяснить, что C ++ не является моим кунг-фу, и это может быть причиной проблемы.

То, что я пытаюсь сделать, это добавить простой QPushButton к вертикальной компоновке в главном окне, которое было встроено в Qt Designer во время выполнения.

Мой пример кода выглядит примерно так ...

QPushButton button = new QPushButton();

QString text("Testing Buttons");

button.setText(text);

//How do we add children to this widget??

ui->myLayout->addWidget(button);

Я получаю следующие ошибки:

/ дом / Graham / myFirstApp / mainwindow.cpp: 22: ошибка: преобразование из "QPushButton *" к нескалярному типу "QPushButton" просьба

/ дом / Graham / myFirstApp / mainwindow.cpp: 27: ошибка: нет подходящей функции для вызова в «QVBoxLayout :: addWidget (QPushButton &)»

/ home / graham / myFirstApp /../ qtsdk-2010.05 / qt / include / QtGui / qboxlayout.h: 85: кандидаты: void QBoxLayout :: addWidget (QWidget *, int, Qt :: Alignment)

Теперь я знаю, что первая ошибка как-то связана с указателями, но я не знаю, что, если кто-то сможет прояснить мою путаницу и предоставить пример кода, который был бы великолепен.

Привет

Graham.

Ответы [ 2 ]

6 голосов
/ 25 января 2011

Это просто проблема C ++, вам нужно использовать звездочку, чтобы объявить кнопку как указатель при использовании оператора new.

QPushButton* button = new QPushButton();
button->setText(text);
ui->myLayout->addWidget(button);
2 голосов
/ 25 января 2011

QPushButton button = new QPushButton();

Указатель на QPushButton не является QPushButton. Это то, из-за чего твой компилятор и это твоя проблема.

...