【发布时间】:2016-08-14 20:26:52
【问题描述】:
我在 Windows7 上使用 Qt5(初学者)。
在我的应用程序的主窗口中,我想显示和删除一些按钮。
widget = new ButtonWidget(ui->frame); // frame is a QScrollArea
connect(ui->addBtns, SIGNAL(clicked()), widget, SLOT(addButtons()));
connect(ui->deleteBtns, SIGNAL(clicked()), widget, SLOT(deleteButtons()));
ButtonWidget 课程在这里:
ButtonWidget::ButtonWidget(QWidget * parent) : QWidget(parent)
{
//addButtons();
}
void ButtonWidget::addButtons()
{
QStringList texts{"1\nok", "2\nok", "3\nok", "4\nok", "5\nok", "6\nok"};
gridLayout = new QGridLayout;
for(int i = 0; i < texts.size(); i++)
{
QPushButton * button = new QPushButton(texts[i]);
gridLayout->addWidget(button, i / 5, i % 5);
}
setLayout(gridLayout);
}
// I'm not sure this method/function is ok... :(
void ButtonWidget::deleteButtons()
{
QLayoutItem * child;
while((child = gridLayout->takeAt(0)) != 0)
{
gridLayout->removeWidget(child->widget());
delete child->widget();
delete child;
}
delete gridLayout;
}
问题是:当我点击add_buttons 时,我会显示所有按钮,但它们是缩小、缩小 之类的...... :
OTOH...如果我从构造函数中的 addButtons() 调用中删除注释(因此从构造函数中调用),结果正常:
所以,最后我有 2 个问题:
1)如何修复代码以便能够正确添加这些按钮(当点击 add_buttons 时)?
2) deleteButtons() 方法可以吗?
【问题讨论】:
-
您可能必须在您的 ButtonWidget 类上实现
sizeHint()或者在addButtons末尾实现resize(sizeHint()); -
我想你可能是对的,但是作为一个 qt/c++ 初学者我不知道该怎么做...我会深入研究文档,也许我会弄清楚或找到在这件事上有用的东西。
-
我认为您可以更改问题的标题,因为它是从您有问题的布局中删除项目。添加工作正常。那我就给你的问题加分。
-
嗯,有点意思...拥有那些微小的按钮远非“工作”好:)
标签: c++ qt user-interface button widget