Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QTreeWidget signals and slots not being triggered
Forum Updated to NodeBB v4.3 + New Features

QTreeWidget signals and slots not being triggered

Scheduled Pinned Locked Moved General and Desktop
2 Posts 2 Posters 3.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    salunkerahul
    wrote on last edited by
    #1

    I'm trying to make use of the QTreeWidget as follows and slots associated with the code below are not called and the return-value for connect(method) is zero. Could readers help me understand my mistakes?

    Header File
    @
    #include <QMainWindow>
    #include <QModelIndex>
    #include <QTreeWidget>

    class test:public QMainWindow
    {
    Q_OBJECT

    public:
    test(QWidget* parent = 0)
    {
    treeWidget = new QTreeWidget(0);
    treeWidget->setWindowModality(Qt::ApplicationModal);
    treeWidget->setWindowTitle("Select Well/Logs");
    treeWidget->setSelectionMode(QAbstractItemView::NoSelection); //QAbstractItemView::MultiSelection
    QStringList headerLabels;
    headerLabels << "Field" << "Inline" << "CrossLine";

      treeWidget->setColumnCount(headerLabels.size());
      treeWidget->setHeaderLabels(headerLabels);
      treeWidget->setAllColumnsShowFocus(true);
      treeWidget->resize(QSize(300,400));
      treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
      treeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    
    bool temp = connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,
            SLOT(currItemClicked(QTreeWidgetItem*, int)));
    printf("value of temp for itemClicked = %d\n", temp);
    temp = connect(treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this,
             SLOT(currItemClicked(QTreeWidgetItem*, int)));
    printf("value of temp for itemChanged = %d\n", temp);
    setupTreeItems();
    temp = connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(dblClick(QModelIndex)));
    printf("value of temp for dblClick = %d\n", temp);
    

    }

    QTreeWidget* getTreeWidget()const { return treeWidget;}

    void currItemClicked(QTreeWidgetItem* item, int col);
    void setTreeItems(const std::multimap<std::string, std::string>& mapData) {}

    private:
    void setupTreeItems();

    QTreeWidget* treeWidget;
    };

    @

    Source file (test.cpp)
    @
    #include <test.h>
    #include <QApplication>
    #include <QDialog>
    #include <QTreeWidget>

    void test::setupTreeItems()
    {
    QStringList header;
    header << "One" << "Two" << "Three";

    foreach(QString nms, header)
    {
    QTreeWidgetItem* field_ele = new QTreeWidgetItem(treeWidget, QStringList(QString(nms)));
    field_ele->setCheckState(0, Qt::Unchecked);
    field_ele->setFlags(Qt::ItemIsEnabled|Qt::ItemIsTristate|Qt::ItemIsUserCheckable);
    }
    treeWidget->resizeColumnToContents(0);

    }

    void test::currItemClicked(QTreeWidgetItem *item, int col)
    {
    printf("itemp->text = %s"n", qPrintable(item->text(0)));
    }

    int main(int argc, char** argv)
    {
    QApplication app(argc, argv);
    QDialog *parent = new QDialog();
    parent->setVisible(false);

    test* testTreeWidget = new test(parent);
    QTreeWidget* treeWidget = testTreeWidget->getTreeWidget();
    
    parent->show();
    treeWidget->show();
    
    //If parent->show() is uncommented, then I can modify
    //select/unselect qtreewidget items.
    
    
    parent->exec&#40;&#41;;
    
    return 0;
    

    }
    @

    Qt-4.8.4(opensource-CentOS)

    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Use qDebug() instead of printf. Could be that you are simply not seeing the output that is being generated. In line 13. put your QMainWindow as parent to get a nice hierarchy:
      @
      treeWidget = new QTreeWidget(this);

      // Then in main() you don't need to get and show your treewidget;
      // it will be done automatically when you show main window.
      // Also, you don't need that strange QDialog as parent of QMainWindow...
      // this is all obsolete, as far as I can tell
      @

      Finally, to make it work:
      In line 39. you need to mark your slots as slots:
      @
      public slots:
      void currItemClicked(QTreeWidgetItem* item, int col);
      void setTreeItems(const std::multimap<std::string, std::string>& mapData) {}
      @

      (Z(:^

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved