标签: qtreewidget

Qt 小部件调整大小为宽度 = 256,但它不应该

表格设置:

QSplitter(在图像上突出显示)包含QTreeWidget(左)和QTableWidget(右):

QSplitter 中这两个小部件的非默认属性:

  • QTreeWidget

    最小尺寸/宽度 = 150

  • QTableWidget

    最小尺寸 / 宽度 = 300
    尺寸策略 / 水平拉伸 = 1

基本上,上面的设置指定了这两个组件的最小宽度,这QTableWidget 就是在表单调整大小期间更改其宽度的宽度。
右侧的按钮位于QVBoxLayout并且其大小是固定的。

问题:

当调整表单QTreeWidget的宽度时,从最小 150 到未知的 256,然后才QTableWidget开始增长,而我预计QTreeWidget宽度根本不会增长,因为QTableWidget水平拉伸设置为 1。

请注意,这与 无关QSplitter,因为当我将这两个小部件放入时也会发生同样的情况QHBoxLayout


更新:

将最大尺寸/宽度设置QTreeWidget为 150(与最小尺寸/宽度相同)以避免调整此小部件的大小,结果如下:

QTreeWidget现在固定为 150,但是当调整窗口大小时,两个小部件之间会出现空白。这个差距增长到256-150=106,然后QTableWidget开始扩大。
基本上结果是相似的,但是现在占据的这个时间区域QTreeWidget专门用于这个空白间隙。

我开始觉得这可能是 Qt 的错误。

技术信息:

  • Ubuntu 10.04(清醒山猫)x86_64
  • 海湾合作委员会 4.4.3
  • Qt 4.6.2

qt qt4 qtreewidget qt-designer qtablewidget

5
推荐指数
1
解决办法
1385
查看次数

PyQt QTreeWidget.clear() 导致崩溃

我已经安装了 python 2.5 和 PyQt 4.8.6。操作系统 - Windows Xp Sp2。我使用以下代码来填充 TreeWidget:

def updateTreeWidget(self, widget, results):
        """ Updates the widget with given results """
        widget.clear()
        for item in results:
            temp = QtGui.QTreeWidgetItem()
            j = 0
            for elem in item: 
                temp.setText(j , str(elem))
                j += 1
            widget.addTopLevelItem(temp)       
        for column in range(widget.columnCount()):
            widget.resizeColumnToContents(column)
Run Code Online (Sandbox Code Playgroud)

它会在第二次使用时导致崩溃。如果我注释掉以下几行之一:

widget.addTopLevelItem(temp) 
Run Code Online (Sandbox Code Playgroud)

或者

widget.clear() 
Run Code Online (Sandbox Code Playgroud)

它可以毫无问题地工作。

我每 60 秒调用一次线程中的函数。这是 MyThread 类的定义。

class MyThread(threading.Thread):
    def __init__(self, db, widget, function, script, parameter):
        threading.Thread.__init__(self)
        self.db = db
        self.function = function
        self.script = script
        self.parameter …
Run Code Online (Sandbox Code Playgroud)

python crash qt pyqt qtreewidget

5
推荐指数
1
解决办法
4112
查看次数

如何在PyQt4中为QTreeWidget实现itemChecked和itemUnchecked信号?

QTreeWidget上的信号itemChecked和itemUncheсked在哪里?

Qt Signals: (quote from PyQt4 QTreeWidget documentation page)

void currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)
void itemActivated (QTreeWidgetItem *,int)
void itemChanged (QTreeWidgetItem *,int)
void itemClicked (QTreeWidgetItem *,int)
void itemCollapsed (QTreeWidgetItem *)
void itemDoubleClicked (QTreeWidgetItem *,int)
void itemEntered (QTreeWidgetItem *,int)
void itemExpanded (QTreeWidgetItem *)
void itemPressed (QTreeWidgetItem *,int)
void itemSelectionChanged ()
Run Code Online (Sandbox Code Playgroud)

目前我解决了这个问题:

self.treeWidget.itemClicked.connect (self.handle)

def handle (item, column): 
    print 'emitted!', item.text(column)
    if item.checkState(column) == QtCore.Qt.Checked:
        # there are a lot of my functions inside which work with item data
        self.handleChecked(item, column) …
Run Code Online (Sandbox Code Playgroud)

qt pyqt signals-slots qtreewidget pyqt4

5
推荐指数
1
解决办法
6769
查看次数

通过字母数字列对PySide.QtGui.QTreeWidget进行排序

我想QTreeWidgetalpha_numeric专栏排序.

更新:

按照ekhumoro的例子,我重新实现了QTreeWidgetItem __lt__使用所需自然排序的方法.

相关代码:

class TreeWidgetItem(QtGui.QTreeWidgetItem):
    def __lt__(self, other):
        column = self.treeWidget().sortColumn()
        key1 = self.text(column)
        key2 = other.text(column)
        return self.natural_sort_key(key1) < self.natural_sort_key(key2)

    @staticmethod
    def natural_sort_key(key):
        regex = '(\d*\.\d+|\d+)'
        parts = re.split(regex, key)
        return tuple((e if i % 2 == 0 else float(e)) for i, e in enumerate(parts))
Run Code Online (Sandbox Code Playgroud)

更新完整的工作示例:

import sys
import re
from PySide import QtGui, QtCore

data = [
    {"name": "Apple", "alpha_numeric": "11"},
    {"name": "Apple", "alpha_numeric": "125b"},
    {"name": …
Run Code Online (Sandbox Code Playgroud)

python sorting pyqt qtreewidget pyside

5
推荐指数
1
解决办法
1235
查看次数

为什么我的 Qt eventFilter 没有拾取 QTreeWidget 上的鼠标事件?

我基本上有这段代码来拦截某些QTreeWidget事件。

MyWidget :: MyWidget ()
{
     m_tree = new QTreeWidget ();
     // ...
     m_tree -> installEventFilter (this);
}

bool MyWidget :: eventFilter (QObject * obj, QEvent * e)
{
    if (m_tree != obj)
        return QWidget :: eventFilter (obj, e);

    qDebug () << e -> type ();

    switch (e -> type ())
    {
        case QEvent :: MouseButtonPress:
        case QEvent :: MouseButtonRelease:
        case QEvent :: MouseMove:
        case QEvent :: Leave:
            qDebug () << "GOT EM";
            break;
    };

    // ...
 } …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreewidget qt-events qmouseevent

5
推荐指数
1
解决办法
1990
查看次数

Python PyQt5 QTreeWidget子项

如何在QTreeWidget中创建子项目?
我能够创建顶级项目(在下面列出),但仍然在寻找子项目.
PyQt-> 5.6
Python-> 3.5
Spyder-> 3.0.2

import sys
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication, QWidget

if __name__ == '__main__':
    app = 0
    if QApplication.instance() != None:
        app = QApplication.instance()
    else:    
        app = QApplication(sys.argv)    

    l1 = QTreeWidgetItem([ "String A",  "String B",  "String C" ])
    l2 = QTreeWidgetItem([ "String AA", "String BB", "String CC" ])

    w = QWidget()
    w.resize(510,210)

    tw = QTreeWidget(w)
    tw.resize(500,200)
    tw.setColumnCount(3)
    tw.setHeaderLabels(["Column 1", "Column 2", "Column 3"])
    tw.addTopLevelItem(l1)
    tw.addTopLevelItem(l2)

    w.show()
    app.exec_()
Run Code Online (Sandbox Code Playgroud)

python pyqt qtreewidget qtreewidgetitem pyqt5

5
推荐指数
1
解决办法
7548
查看次数

使用绝对文件路径中的层次结构填充QTreeWidget

我有一个文件,其中列出了绝对文件路径,每行1个.列出的文件是有序的,因此例如/Documents/dir中的所有文件将在文件中彼此之后列出.

我想要做的是将所有这些文件QTreeWidget放在一个漂亮的分层结构中,就像普通的文件系统一样.我如何从我的绝对路径文件中做到这一点?

这就是我对此进行编码的程度:

QFile file(FILENAME_ENCRYPTED);
QString line;
QDir dir;

QTreeWidgetItem *item;
if (file.open(QIODevice::ReadOnly)) {
    QTextStream stream( &file );
    do {
        line = stream.readLine();
        if (!line.isNull()) {
            dir = QDir(line);
            item = new QTreeWidgetItem();
            item->setText(0, dir.dirName());
            this->ui->treeWidget->addTopLevelItem(item);
        }
    } while (!line.isNull());
}
file.close();
Run Code Online (Sandbox Code Playgroud)

这工作正常,但它只列出了彼此之后的所有文件名.我想我必须做一些递归函数,但递归不是我最好的朋友,我更喜欢迭代!有人能给我一个正确的方向吗?:)

recursion qt qtreewidget

4
推荐指数
1
解决办法
7573
查看次数

QTreeWidget editItem失败,出现"编辑:编辑失败"

QTreeWidgetItem添加了一个QTreeWidget:

QTreeWidgetItem* item = new QTreeWidgetItem(ui->trwPairs);
item->setFlags(item->flags() | Qt::ItemIsEditable);
Run Code Online (Sandbox Code Playgroud)

如果项目已编辑,我想对新值进行一些检查:

Pairs::Pairs(QWidget *parent) :
QWidget(parent),
  ui(new Ui::Pairs)
{
  ui->setupUi(this);
  connect(this->ui->trwPairs, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(Validate(QTreeWidgetItem*,int)));
}

void Pairs::Validate(QTreeWidgetItem* item, int column)
{
  if (item->text(column).toInt() < 1)
  {
    QMessageBox::critical(this, "Error", QString("Node ID ") + item->text(column) +  " is invalid.");
    ui->trwPairs->editItem(item, column);
  }
}
Run Code Online (Sandbox Code Playgroud)

当然,如果它小于1,它会捕获它,并给我消息框.但是,打印到cerris edit: editing failed并且项目不处于编辑模式.我错过了什么?

c++ qt qtreewidget qwidget

4
推荐指数
2
解决办法
6109
查看次数

如何获得QTreeWidget内部项目移动的通知?

我将一个QTreeWidget子类化,将其dragDropMode设置为InternalMove并使用自定义项填充它,其中一些可以被拖动,其他可以接受丢弃.用户可以按预期在树周围移动项目.但我需要通知项目顺序的变化并做出适当的反应.不幸的是,没有与我可以连接的树内物品移动相关的信号.

我尝试获取QTreeWidget的底层模型()的句柄,然后连接到其rowsMo​​ved信号,但在内部移动期间似乎没有发出.

我重新实现了QTreeWidget的dropEvent(),但没有办法确定那里的目标行索引.

dropMimeData()事件不会被调用在所有的内部动作,显然.

我可以尝试其他任何方法吗?谢谢.

c++ notifications qt qtreewidget

4
推荐指数
1
解决办法
2582
查看次数

重绘 QTreeWidget

我有一个基于 QTreeWidget 的简单类。在某些情况下(当其中一列的值更新时),我需要重新绘制它。我有一个函数,当我需要更新我的小部件时调用:

void TreeWidget::updated()
{
    /* some actions with cells */

    /* here need to repaint widget */
    this->update();
    /* also I'm tried this->repaint(); */
}
Run Code Online (Sandbox Code Playgroud)

但行this->update();(或this->repaint();) 没有给出任何结果。仅当我单击小部件时才重新绘制它。

那么我该如何重新绘制我的小部件呢?

c++ qt qtreewidget qt5

4
推荐指数
1
解决办法
1053
查看次数