Qt動態新增控制元件
前言
很多時候我們可以在UI designer上拖拽控制元件進行編寫UI,但有的時候需要的控制元件數量是未知的,這時候就需要在程式碼中進行編寫了。
效果
以下是新增2個控制元件組的效果
以下是新增20個控制元件組的效果,控制元件過多會自動新增滾動條
點選delete按鈕可以刪除所有控制元件組,同樣可以知道是哪個按鈕點選的。
實現
程式碼參考了網上的,自己做了一些修改。
建立一個新的控制元件組類,佈局,開出介面供外部呼叫
void setInfo(QString str_lb,QString str_btn);
void Mybtns::setInfo(QString str_lb, QString str_btn)
{
ui->label->setText(str_lb);
ui->pushButton->setObjectName(str_btn);
}
MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QHBoxLayout>
#include <QPushButton>
#include <QDebug>
#include "mybtns.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void slotBtnClicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QList<Mybtns*> list_widget;
};
#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for (int i = 0; i < 20; i++)
{
Mybtns *widget = new Mybtns();
list_widget.append(widget);
ui->vlayout->addWidget(widget);
widget->setInfo("張三(123456)","#" + QString::number(i));
}
QList<QPushButton *> btn = this->findChildren<QPushButton *>();
foreach (QPushButton * b, btn) {
connect(b, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotBtnClicked()
{
QPushButton *btn = (QPushButton *)sender();
QString objectName = btn->objectName();
if(objectName.indexOf("#") != -1)
{
objectName.replace("#","");
qDebug()<<objectName;
}
}
void MainWindow::on_pushButton_clicked()
{
int num = ui->vlayout->count(); // 獲取佈局中的item的數量
while( num){
QWidget *widget = ui->vlayout->itemAt(num - 1)->widget();
ui->vlayout->removeWidget(widget);
delete widget;
num --;
}
}
連結
連結: Qt動態新增控制元件demo
相關文章
- Linux下快速靜態編譯Qt以及Qt動態/靜態版本共存Linux編譯QT
- WPF給控制元件新增運動動畫控制元件動畫
- QT控制元件大全QT控制元件
- QT實現可拖動自定義控制元件QT控制元件
- mobx動態新增observable
- 動態計算控制元件高度控制元件
- Qt實現控制元件的漸隱漸現動效QT控制元件
- HDFS動態新增節點
- JavaScript動態新增li元素JavaScript
- 聊聊QT新增MySQL驅動依賴的問題QTMySql
- 動態綁資料(Repeater控制元件控制元件
- Elastic-Job:動態新增任務,支援動態分片AST
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- 使用 addRouteMiddleware 動態新增中間
- 為IHttpClientFactory新增動態命名配置HTTPclient
- Qt實現自定義控制元件QT控制元件
- QT時鐘控制元件顯示QT控制元件
- QT佈局之控制元件空隙QT控制元件
- Qt開發Activex筆記(二):Qt呼叫Qt開發的Activex控制元件QT筆記控制元件
- 【轉載】WPF中TreeView控制元件資料繫結和後臺動態新增資料(一)View控制元件
- QT之控制元件疊加顯示QT控制元件
- JavaScript 動態新增與刪除元素JavaScript
- 使用TypeDescriptor給類動態新增Attribute
- JavaScript動態為table表格新增行JavaScript
- Qt實現炫酷啟動圖-動態進度條QT
- Qt列表等控制元件實現平滑滾動&deepin啟動器存在的問題QT控制元件
- QT mainwindow UI介面新增工具欄QTAIUI
- Qt自定義開關按鈕控制元件QT控制元件
- flutter TabBarView 動態新增刪除頁面FluttertabBarView
- JavaScript動態新增或者刪除HTML元素JavaScriptHTML
- JavaScript動態建立div並新增樣式JavaScript
- jQuery動態新增和刪除表格行jQuery
- JavaScript動態新增和刪除div元素JavaScript
- RK3399開發板效能試用體驗(使用QT編寫組態控制元件)QT控制元件
- Qt 對話方塊新增工具欄QT
- qt自定義控制元件樣式02-QSpinBoxQT控制元件
- qt設計器中使用自定義控制元件QT控制元件
- Qt 判斷滑鼠在某一控制元件上QT控制元件