简体   繁体   English

如何通过单击QPushbutton更新QTreeWidget

[英]How to update a QTreeWidget by Clicking on QPushbutton

I'm developing a Qt app in C++ 我正在用C ++开发Qt应用

I have create a layout with button bar, TreeView... 我用按钮栏,TreeView创建了一个布局。

The Treeview is defined in my MainWindow.cpp Treeview在我的MainWindow.cpp中定义

MainWindow::MainWindow()
{
    setWindowTitle(QString::fromUtf8("PULS"));
    resize(800,600);
    setUnifiedTitleAndToolBarOnMac(true);
    createDeviceStatusBar();
    createSectionBar();
    createTreeView();

    QWidget *MainWindowWidget = new QWidget();

    QVBoxLayout *MainWindowLayout = new QVBoxLayout(MainWindowWidget);

    BrowserSection = new QGroupBox();

    QWidget *BrowserWidget = new QWidget();
    QHBoxLayout *BrowserLayout = new QHBoxLayout(BrowserWidget);
    BrowserLayout->addWidget(SectionBar);
    BrowserLayout->addWidget(TreeSection);

    BrowserSection->setLayout(BrowserLayout);

    MainWindowLayout->addWidget(DeviceSection);
    MainWindowLayout->addWidget(BrowserSection);

    setCentralWidget(MainWindowWidget);
    show();
}

The createSectionBar() is a layout defined as below: createSectionBar()是如下定义的布局:

void MainWindow::createSectionBar()
{
    SectionBar = new QGroupBox();

    QVBoxLayout *SectionBarlayout = new QVBoxLayout;
    SectionBarlayout->setContentsMargins(QMargins(0,0,0,0));

    MusicButton = new QPushButton();
    MusicButton->setFixedSize(110,150);
    MusicButton->setIcon(QIcon(":/images/music.png"));
    MusicButton->setIconSize(QSize(90,144));
    MusicButton->setFlat(true);
    MusicButton->setAutoFillBackground(true);
    connect(MusicButton, SIGNAL(clicked()), this, SLOT(MusicTreeFile()));


    SectionBarlayout->addWidget(MusicButton);


    SectionBar->setLayout(SectionBarlayout);
}

The createTreeView() is defined as below to enable TreeView and Items. 如下定义createTreeView()以启用TreeView和Items。

void MainWindow::createTreeView()
{

    TreeSection = new QGroupBox();

    QVBoxLayout *TreeLayout = new QVBoxLayout;

    MyTree = new TreeWidget();

    MyTree->setSortingEnabled(true);
    MyTree->setColumnWidth(0, 400);

    QTreeWidgetItem* headerItem = new QTreeWidgetItem();
    headerItem->setText(0,QString("File Name"));
    headerItem->setText(1,QString("Size (Bytes)"));
    headerItem->setText(2,QString("Date"));
    MyTree->setHeaderItem(headerItem);
    MyTree->setAutoFillBackground(true);

    TreeLayout->addWidget(MyTree);

    TreeSection->setLayout(TreeLayout);
}

What I need is to find a way to file the MyTree with 我需要找到一种方法来向MyTree提交文件

while (file != NULL && file->parent_id == folder_parent) {
    QTreeWidgetItem* item = new QTreeWidgetItem();  
    int i;  
    LIBMTP_file_t *oldfile;                 
    item->setText(0,file->filename);    
    Tree->addTopLevelItem(item);
    ....
}

here is the header file: 这是头文件:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow();

protected:

private slots:
    void MusicTreeFile();

private:
    void createSectionBar();
    void createTreeView();
    void createDeviceStatusBar();

    QGroupBox *SectionBar;
    QGroupBox *TreeSection;
    QGroupBox *DeviceSection;
    QGroupBox *BrowserSection;

    QPushButton *MusicButton;

    TreeWidget *MyTree;

};

but it needs to be done only when clicking on MusicPushButton, I have already connected the MusicTreeFile() to the PushButton() action. 但是只有在单击MusicPushButton时才需要这样做,我已经将MusicTreeFile()连接到PushButton()动作。 but how to access to MyTree as it's also defined in another class.. 但是如何访问MyTree,因为它也是在另一个类中定义的。

You do not connect a signal to a class. 您未将信号连接到班级。 You connect it to an instance of a class. 您将其连接到类的实例 And both of your instances are defined in MainWindow . 并且您的两个实例都在MainWindow中定义。 So after both widgets are created you can call 因此,在创建两个小部件之后,您可以调用

QObject::connect(this->MusicButton, SIGNAL(clicked()), this->MyTree, SLOT(slot_name()));

With slot_name being your function 使用slot_name作为您的功能

TreeWidget::slot_name{
    while (file != NULL && file->parent_id == folder_parent) {
        ....
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM