1、背景
就是表格里放控件,或者說是動態(tài)生成控件,就像Excel一樣,這樣操作方便,這也是界面強(qiáng)大的體現(xiàn),以前的界面都是一些文本框之類的,顯然操作比較簡單,如果復(fù)雜邏輯的話,處理就比較麻煩了
2、實(shí)例
2.1、界面情況:

image.png
2.2、頭文件的情況
#ifndef DYNAMICCTRLDIALOG_H
#define DYNAMICCTRLDIALOG_H
#include <QDialog>
#include <QTableWidget>
namespace Ui {
class DynamicCTRLDialog;
}
class DynamicCTRLDialog : public QDialog
{
Q_OBJECT
public:
explicit DynamicCTRLDialog(QWidget *parent = 0);
~DynamicCTRLDialog();
void init();
private slots:
void changTextListPath(QString str);
private:
Ui::DynamicCTRLDialog *ui;
QTableWidget *m_tableWidget;
};
#endif // DYNAMICCTRLDIALOG_H
2.2、在父窗口上生成控件
m_tableWidget = ui->tableWidget;
m_tableWidget->setRowCount(1);
QTableWidgetItem *item = new QTableWidgetItem();
m_tableWidget->setItem(0, 0, item);
item->setText(QString::fromStdString("小明"));
item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
item = new QTableWidgetItem();
m_tableWidget->setItem(0, 1, item);
//1/new一個控件,并且指定其父窗口
QComboBox *combobox_Args=new QComboBox(m_tableWidget);
QStringList combobox_subArgs_list;
combobox_subArgs_list.append("1班");
combobox_subArgs_list.append("2班");
combobox_Args->addItems(combobox_subArgs_list);
combobox_Args->setCurrentIndex(1);
2.2 、指定表格的位置
//2/指定位置
m_tableWidget->setCellWidget(0,1,combobox_Args);
2.3、指定控件的事件
connect(combobox_Args,SIGNAL(currentIndexChanged(QString)),this,SLOT(changTextListPath(QString)));
void DynamicCTRLDialog::changTextListPath(QString str)
{
qDebug()<<str;
}
2.4、效果情況

image.png
3、總結(jié)
綜合來說實(shí)現(xiàn)挺簡單的,關(guān)鍵一步就是在父窗口上生成控件,在父窗口生成控件,體現(xiàn)到界面上,就是,控件成為了父窗口的一部分,然后,再放到指定位置就可以了。
創(chuàng)建控件時,可以指定??吭谀硞€父窗口上面,這時控件將作為子窗口被束縛在其父窗口的內(nèi)部,
并伴隨父窗口一起移動,隱藏,顯示和關(guān)閉;否則,該控件將作為獨(dú)立窗口顯示在屏幕上,且游離于其它窗口之外

image.png