天天看點

Qt:TreeWidget中添加子控件,并在主視窗接收響應

頭檔案:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QTreeWidgetItem>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void AddItem(const QString &text);
private slots:
    void DelItem(QTreeWidgetItem *item);
};

#endif // MAINWINDOW_H
           

deletewidget.h

#ifndef DELETEWIDGET_H
#define DELETEWIDGET_H

#include <QWidget>
#include <QTreeWidgetItem>

namespace Ui {
class DeleteWidget;
}

class DeleteWidget : public QWidget
{
    Q_OBJECT

public:
    explicit DeleteWidget(QTreeWidgetItem *idItem, QWidget *parent = 0);
    ~DeleteWidget();
private:
    Ui::DeleteWidget *ui;
signals:
    int delItem(QTreeWidgetItem *idItem);
private:
    QTreeWidgetItem *m_idItem;
private slots:
    void OnDelBtnClicked();
};

#endif // DELETEWIDGET_H
           

源檔案:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "deletewidget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setFixedSize(400,300);//設定視窗大小,并限制最大化
    ui->treeWidget->setColumnWidth(0,200);//設定第一列列寬
    AddItem("Bunfly.txt");
    AddItem("萬裡長城.mp3");
    AddItem("盛世狼煙.txt");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::AddItem(const QString &text)
{
    QTreeWidgetItem *item = new QTreeWidgetItem;
    item->setText(0,text);
    ui->treeWidget->addTopLevelItem(item);

    DeleteWidget *widget = new DeleteWidget(item);
    ui->treeWidget->setItemWidget(item,1,widget);

    connect(widget,SIGNAL(delItem(QTreeWidgetItem*)),
            this,SLOT(DelItem(QTreeWidgetItem*)));
}

void MainWindow::DelItem(QTreeWidgetItem *item)
{
    int index = ui->treeWidget->indexOfTopLevelItem(item);
    ui->treeWidget->takeTopLevelItem(index);
    delete item;
}
           

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
           

deletewidget.cpp

#include "deletewidget.h"
#include "ui_deletewidget.h"

DeleteWidget::DeleteWidget(QTreeWidgetItem *idItem, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DeleteWidget),m_idItem(idItem)
{
    ui->setupUi(this);
    ui->delButton->setFlat(true);//設定按鈕透明
    connect(ui->delButton,SIGNAL(clicked()),
            this,SLOT(OnDelBtnClicked()));
}

DeleteWidget::~DeleteWidget()
{
    delete ui;
}

void DeleteWidget::OnDelBtnClicked()
{
    emit delItem(m_idItem);
}
           

設計界面:

mainwindow.ui

Qt:TreeWidget中添加子控件,并在主視窗接收響應

deletewidget.ui

Qt:TreeWidget中添加子控件,并在主視窗接收響應

運作效果:

Qt:TreeWidget中添加子控件,并在主視窗接收響應
Qt:TreeWidget中添加子控件,并在主視窗接收響應