您的位置:首页 > 编程语言 > Qt开发

Qt:TreeWidget中添加子控件,并在主窗口接收响应

2017-10-15 18:06 681 查看
头文件:

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::~DeleteW
a4be
idget()
{
delete ui;
}

void DeleteWidget::OnDelBtnClicked()
{
emit delItem(m_idItem);
}
设计界面:

mainwindow.ui



deletewidget.ui



运行效果:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: