1

プログラム

フォーラム投稿のデータベースへのインターフェースを書いています。

上記のプログラムには、トピックブラウザがアクティブな2つのウィジェットを格納するツールボックスウィジェットがあります。QTableWidgetトピックブラウザは、トピックフォーラムのカテゴリラベル、ナビゲーションコントロールウィジェット、およびウィジェットの本体(QTW)を格納する垂直レイアウトの親QFrameで構成されます。QTWの選択動作はQAbstractItemView.SelectRowsです。

問題は、関数をitemClicked()シグナルに接続すると、postsおよび列でセルを選択した場合にのみシグナルが発火し、トピックセルViewsをクリックしても発火しないことです。name他の信号を試しましたが、同じ動作をします。注意すべき点の1つは、名前の最初の文字が少しあいまいになっていることです。だから私はおそらくこれが問題を引き起こしていると思っています。

何かアドバイス ?

編集

テーブルを設定するコード

   class ForumTopicWidget(QFrame):
    def __init__(self,db):
        QFrame.__init__(self)

        self._db=db
        self._rowcount = 21
        self._current_page = 1
        self._forum_id = None
        self._category_id = None

        self._navigation_widget = NavigationHeadWidget()
        self._layout = QVBoxLayout()
        self._title_label = QLabel()
        self._title_label.setText("<b>Topics</b>")
        self._title_label.setAlignment(Qt.AlignCenter)
        self._layout.addWidget(self._title_label)
        self._layout.addWidget(self._navigation_widget)
        self._topic_list = QTableWidget()
        #self._topic_list.setMinimumWidth(600)
        self._topic_list.setRowCount(self._rowcount)
        self._topic_list.setColumnCount(3)
        self._topic_list.setHorizontalHeaderLabels(["Name","Posts", "Views"])
        self._topic_list.horizontalHeader().setResizeMode(0,QHeaderView.Stretch)
        self._topic_list.verticalHeader().setVisible(False)
        #self._topic_list.setColumnWidth(0,476)
        self._topic_list.setColumnWidth(1,61)
        self._topic_list.setColumnWidth(2,61)
        self._topic_list.setSelectionBehavior(QAbstractItemView.SelectRows)
        self._layout.addWidget(self._topic_list)
        self.setLayout(self._layout)
        self.setFrameStyle(QFrame.WinPanel)
        self._topic_list.cellClicked.connect(self.cell_clicked)
        self._navigation_widget.set_nav_functions(self._shift_first, 
                                                  self._shift_prev, 
                                                  self._shift_next, 
                                                  self._shift_last)
        self.page_ids = []

    def cell_clicked(self,item):
        self._prime_topic(self.page_ids[item])

    def set_item_click_function(self,function):
        self._prime_topic = function

    def set_initial_state(self, category_id, forum_name):
        self._category_id = category_id
        self._topic_count = self._db.get_topic_count(category_id)
        self._last_page = int(ceil(float(self._topic_count) / self._rowcount))
        self.shift_state(1) 
        self._title_label.setText("<b> %s Topics</b>" % forum_name)

    def shift_state(self, new_page):
        self._current_page = new_page
        self.populate_page(new_page)
        self._navigation_widget.set_pagination_string(self._current_page, 
                                                      self._last_page)
    def _shift_first(self):
        self.shift_state(1)
        self._current_page = 1

    def _shift_prev(self):
        if self._current_page != 1:
            self._current_page = self._current_page - 1
            self.shift_state(self._current_page)

    def _shift_next(self):
        if self._current_page != self._last_page:
            self._current_page = self._current_page + 1
            self.shift_state(self._current_page)

    def _shift_last(self):
        self.shift_state(self._last_page)

    def populate_page(self,page_number):
        pages = self._db.get_paginated_topics(self._category_id,page_number,self._rowcount);

        i=0
        self.page_ids[:]=[]
        for page in pages:
            self.page_ids.append(page.id)
            q = QLabel()
            q.setText('<font size ="3">%s</font>' % page.title)
            self._topic_list.setCellWidget(i,0, q)
            pc = QTableWidgetItem(str(page.post_count))
            vc = QTableWidgetItem(str(page.view_count))
            pc.setFlags(QtCore.Qt.ItemIsEnabled)
            #pc.setFlags(QtCore.Qt.ItemIsEnabled)
            self._topic_list.setItem(i,1, pc)
            self._topic_list.setItem(i,2, vc)
            i = i +1

この問題は、OSXとLinuxで発生します。

4

1 に答える 1

1

freenodeのircチャンネル#qtのSqwishyが私のエラーを指摘しました。

最初の列QLabelには、標準のテキストではなくのが含まれます。QLabelには独自のシグナルがあります。次の2列は、テーブルがシグナルを管理するタイプでした。の代わりにラベルを使用した理由はQTableWidgetItem、フォントのサイズを変更したかったので、これが唯一の方法であるという印象を受けたためです。

Populate_pageメソッドは次のようになります。

   def populate_page(self,page_number):
        pages =\ 
        self._db.get_paginated_topics(self._category_id,page_number,self._rowcount);

        i=0
        self.page_ids[:]=[]
        for page in pages:
            self.page_ids.append(page.id)
            nc = QTableWidgetItem(str(page.title))
            pc = QTableWidgetItem(str(page.post_count))
            vc = QTableWidgetItem(str(page.view_count))
            self._topic_list.setItem(i,0,nc)
            self._topic_list.setItem(i,1, pc)
            self._topic_list.setItem(i,2, vc)
            i = i +1
于 2012-08-02T19:24:53.080 に答える