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

deletewidget.ui


運行效果:

發佈了75 篇原創文章 · 獲贊 32 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章