在Qt中手动设置窗口布局的正确方法
我需要一个QMainWindow布局来根据内核的数量进行更改。 因此,我不使用设计模式手动设置它 我的问题是: 创建此布局后,如何引用它包含的小部件在Qt中手动设置窗口布局的正确方法,qt,qwidget,qmainwindow,qlayout,qgridlayout,Qt,Qwidget,Qmainwindow,Qlayout,Qgridlayout,我需要一个QMainWindow布局来根据内核的数量进行更改。 因此,我不使用设计模式手动设置它 我的问题是: 创建此布局后,如何引用它包含的小部件 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //... buildLayout(); //... // Now I
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//...
buildLayout();
//...
// Now I'd like to use something like this:
// ui->threadingTable->...
// However, it's not the member of ui
}
void MainWindow::buildLayout()
{
QWidget *window = new QWidget(this);
QTableView *threadingTable = new QTableView(window);
//...
QGridLayout *layout = new QGridLayout(window);
layout->addWidget(threadingTable, 0, 0);
//...
window->setLayout(layout);
this->setCentralWidget(window);
}
我可以从这个->centralWidget中获取QLayoutItem。
或者我可以在MainWindow类的布局成员中创建所有小部件并直接访问它们
不过,我觉得这两种方法都不对
有没有办法将小部件传递到ui?
这样我就可以打电话联系他们了
ui->threadingTable两个选项都可以。可以从主类成员或直接从对象层次结构获取指向threadingTable的指针:
qDebug() << qobject_cast<QGridLayout *>(this->centralWidget()->layout())->itemAtPosition(0, 0)->widget();
qDebug() << this->centralWidget()->layout()->itemAt(0)->widget();
当然,可能需要空验证。你也可以检查这个问题
类Ui::MainWindow是从可在设计模式下生成的.Ui xml表单自动生成的:
由于布局是手动构建的,.ui文件和ui实例根本不需要。您可以从项目中删除它们
另一方面,即使在.ui表单的设计模式下,也可以使用自定义小部件。
因此,如果您需要一些棘手的对象,您可以在handy设计模式下构建整个表单,然后,例如,标准的QTableView可能会升级到继承自QTableView的CustomTableView。这个自定义类可能实现一些特殊的行为。在我看来,让小部件也成为主类的成员没有错。当然,您通常不需要访问所有信号,在将它们添加到布局之前,可能会连接信号。