首先,我是Qt的新手,我需要一些有关添加小部件的建议。我创建了简单的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::AddButtons()
{
qDebug() << "click";
QPushButton* button = new QPushButton(this);
ui->verticalLayout->addWidget(button);
}
void MainWindow::on_blablaButton_clicked()
{
QPushButton* button = new QPushButton(this);
ui->verticalLayout->addWidget(button);
}
因此on_blablaButton_clicked()-我是从Design创建的,可以按预期工作。
AddButtons()-公共无效函数,我从另一个小部件调用。在这种情况下,addWidget(button)不起作用。但是单击按钮后可以正常工作,我在日志中看到调试消息。
据我了解,我无法通过自定义函数创建小部件,对吗?而对于此操作,我需要使用其他方法吗?
UPD:
所以我添加了更多调试消息,发现有些奇怪。
我更新的代码:
void MainWindow::AddButtons()
{
qDebug() << "click";
QPushButton* button = new QPushButton(this);
qDebug() << "button name" << button;
ui->verticalLayout->addWidget(button);
qDebug() << "layout count" << ui->verticalLayout->count();
button->show();
qDebug() << "post click";
}
void MainWindow::on_blablaButton_clicked()
{
QPushButton* button = new QPushButton(this);
ui->verticalLayout->addWidget(button);
qDebug() << "layout count" << ui->verticalLayout->count();
}
当我单击自定义功能时,我会在日志中得到它:
click
button name QPushButton(0x2a10a17de10)
layout count 1
post click
click
button name QPushButton(0x2a10a17f4d0)
layout count 1
post click
如果按此按钮(:: on_blablaButton_clicked())
layout count 1
layout count 2
layout count 3
我不明白为什么我的布局数量不同???我想我做错了什么...但是暂时找不到。
UPD2:
在您的帮助下,我明白了。因此,qcast-某些原因没有帮助我(我认为我需要有关此演员表的更多信息)。但是,如果我直接将指针链接(使用MainWindow)添加到我的窗口小部件,那就完美了!
这是在mainwindow.cpp中的外观:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Form* f = new Form;
f->Parent = this;
layout()->addWidget(f);
}
并在我的自定义小部件中...
void Form::on_customWidgetButton_clicked()
{
//MainWindow* m = new MainWindow();
//m->AddButtons();
//MainWindow* m = qobject_cast<MainWindow*>(parentWidget());
Parent->AddButtons();
}
如您所见,我在qobject_cast上失败了...这很奇怪,因为代码的某些部分可以正常工作并且可以在该行中堆叠...(也许对于有意义的人而言):
UPD3:
好的。演员也可以。现在,我遇到了真正的问题-由于某种原因,此方法不适用于“升级”小部件。因此,我第一次创建小部件的方式-创建了form.ui文件,对其进行了更改,并将mainwindow.ui中的空小部件升级为我的自定义小部件类。这样,我无法在布局中添加新按钮(请参见调试图像)。
但是,如果我以这种方式添加小部件:
Form* f = new Form;
f->Parent = this;
layout()->addWidget(f);
一切正常。