qt如何根据输入的值创建动态控件。比如输入5创建五个label

qt如何根据输入的值创建动态控件。比如输入5创建五个label,第1张

// ----- 答案肯定是可以的 -----//

// 先创建原先的界面,用布局进行管理

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就会自动添加一个滚动条了。

还是不懂的话请留言,方便咨询。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11823786.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存