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


运行效果:

您可以按照以下步骤在Linux使用Qt实现在窗口弹出一个弹出式窗口,并在该窗口添加一个ComboBox控件: 1. 创建一个新的Qt Widgets应用程序项目。 2. 在窗口设计界面添加一个按钮(例如"弹出窗口")作为弹出窗口的触发器。 3. 在窗口的头文件添加一个私有成员变量来保存弹出式窗口的指针。 ```cpp private: QDialog *popupWindow; ``` 4. 在窗口的源文件,实现槽函数来创建和显示弹出式窗口。 ```cpp void MainWindow::on_popupButton_clicked() { if (!popupWindow) { popupWindow = new QDialog(this); popupWindow->setWindowTitle("弹出窗口"); QComboBox *comboBox = new QComboBox(popupWindow); comboBox->addItem("选项1"); comboBox->addItem("选项2"); comboBox->addItem("选项3"); QVBoxLayout *layout = new QVBoxLayout(popupWindow); layout->addWidget(comboBox); popupWindow->setLayout(layout); } popupWindow->show(); } ``` 5. 在窗口的析构函数,释放弹出式窗口的内存。 ```cpp MainWindow::~MainWindow() { delete popupWindow; } ``` 6. 在窗口的构造函数或初始化函数,将按钮的clicked信号连接到槽函数。 ```cpp connect(ui->popupButton, &QPushButton::clicked, this, &MainWindow::on_popupButton_clicked); ``` 7. 编译并运行程序。当您单击窗口的"弹出窗口"按钮时,将会显示一个弹出式窗口,并在该窗口显示一个ComboBox控件。 这是一个基本示例,您可以根据需要进行进一步的定制和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值