c – 将小部件添加到QFileDialog
发布时间:2020-12-16 09:45:26 所属栏目:百科 来源:网络整理
导读:我需要在QFileDialog的布局中添加一个小部件(QTableWidget).我知道QGridLayout的大小(3,4).该表必须位于第3行并跨越所有列. QTableWidget* tableWidget = new QTableWidget(this);QGridLayout *layout = static_castQGridLayout*(QFileDialog::layout());lay
我需要在QFileDialog的布局中添加一个小部件(QTableWidget).我知道QGridLayout的大小(3,4).该表必须位于第3行并跨越所有列.
QTableWidget* tableWidget = new QTableWidget(this); QGridLayout *layout = static_cast<QGridLayout*>(QFileDialog::layout()); layout->addWidget(tableWidget,2,1,4); 使用此代码,包含lineEdit和save / open pushButton的原始第3行将消失.如何在已存在的QGridLayout小部件之间添加小部件,以便原始小部件保留在布局中. 解决方法
我强烈建议您不要依赖QFileDialog的实现.不同平台或不同版本的Qt的布局可能不同.将表放在对话框下或其右侧可能更为正确.这可以轻松完成,而无需改变QFileDialog本身的布局.只需创建一个QVBoxLayout并将QFileDialog和QTableWidget放入其中.
但是,问题已经提出,并且存在解决方案. QGridLayout没有QBoxLayout :: insertItem等功能.所以我们需要手动实现这种行为.计划是: >获取放置在第3行和第4行的布局项列表. 工作代码: QFileDialog* f = new QFileDialog(); f->setOption(QFileDialog::DontUseNativeDialog,true); //we need qt layout QGridLayout *layout = static_cast<QGridLayout*>(f->layout()); QList< QPair<QLayoutItem*,QList<int> > > moved_items; f->show(); for(int i = 0; i < layout->count(); i++) { int row,column,rowSpan,columnSpan; layout->getItemPosition(i,&row,&column,&rowSpan,&columnSpan); if (row >= 2) { QList<int> list; list << (row + 1) << column << rowSpan << columnSpan; moved_items << qMakePair(layout->takeAt(i),list); i--; // takeAt has shifted the rest items } } for(int i = 0; i < moved_items.count(); i++) { layout->addItem(moved_items[i].first,moved_items[i].second[0],moved_items[i].second[1],moved_items[i].second[2],moved_items[i].second[3]); } QTableWidget* tableWidget = new QTableWidget(); layout->addWidget(tableWidget,4); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |