
QWidget *widgetMain = new QWidget()
// 加入一个输入框和按钮
QLineEdit *lineEdit = new QLineEdit(widgetMain)
QPushButton *btn = new QPushButton(widgetMain)
// 用水平布局将这2个控件框起,并且置于界面顶部
QHBoxLayout *horLayout = new QHBoxLayout()
horLayout->addWidget(lineEdit, 4)
horLayout->addWidget(btn, 1) // 设置布局比例为4:1
// 然后添加一个全局布局控件
QVBoxLayout *verLayout = new QVBoxLayout(widgetMain)
verLayout->addLayout(horLayout)// 加入刚才的输入组,底部添加d簧
verLayout->addStretch()
// --------- 基本界面创建完成 -------------- //
// 关联处理动态创建
int nCnt = lineEdit->text().toInt() // 输入的个数
for (int i = 0 i < nCnt i++) {
QLabel *label = new QLabel(widgetMain)
// 插入之前的布局
label->setText(QString("动态创建label %1).arg(i + 1))
verLayout->insertWidget(1 + i, label)
}
// 大功告成
// 备注,以上代码纯手工,写法或其他错误请自行修改,仅作参考
动态对话框是在程序运行时用 Qt Designer 的.ui 文件创建。不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序时使用类 QUiLoader 加载.ui文件,例如下面的代码:
QUiLoader uiLoader
QFile file("sortdialog.ui")
QWidget *sortDialog = uiLoader.load(&file)
if (sortDialog) {
...
}
子控件可以用 QObject::findChild<T>()得到
QComboBox *primaryColumnCombo =
sortDialog->findChild<QComboBox *>("primaryColumnCombo")
if (primaryColumnCombo) { ...
}
findChild<T>()是模板成员函数,得到类型为 T 的给定名字的子控件的指针。由于编
译器的原因,用 MSVC6 是得不到的。如果使用的是 MSVC6,那么可以使用全局函数
qFindChild<T>()。
QUiLoader 类在一个单独的链接库中,如果在一个应用程序中使用了 QUiLoader,
必须在这个程序的.pro文件中添加下面这样的代码:
CONFIG += uitools
使用动态对话框不用重新编译程序就能够改变对话框的布局。
很简单,只需要在窗口中拖进一个QScrollArea控件,然后再将一个QWidget控件拖动到QScrollArea控件中成为它的子控件,这样只需要在程序中将新建的控件(父节点要设为这个QWidget),通过setGeometry函数将位置设置在QWidget上,注意当控件位置超出QScrollArea时,要将这个QWidget的size最初相应的拉长,拉大,这样QScrollArea就会自动添加一个滚动条了。还是不懂的话请留言,方便咨询。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)