Записки программиста Программирование и не только

3Фев/120

Слот. Поиск по QTreeWidget. Еще вариант.

Ищет по листьям. По первому столбцу.
Если дерево одноуровневое, то проверку на childCount можно убрать.

void MyClass::find(QString aFindString)
{
    QTreeWidgetItemIterator it(myTree);
    while (*it)
    {
        if (!(*it)->text(0).contains(aFindString, Qt::CaseInsensitive) && ((*it)->childCount() == 0))
        {
            (*it)->setHidden(true);
        }
        else
        {
            (*it)->setHidden(false);
        }
        ++it;
    }
}

Коннект идентичен.

QLineEdit *findEdit = new QLineEdit(this);
connect(findEdit,SIGNAL(textEdited(QString)),this,SLOT(find(QString)));

Должно работать гораздо быстрее первого варианта :)

Метки записи: , , Нет комментариев
27Янв/120

Слот. Поиск по QTreeWidget.

Поиск работает только в одноуровневом дереве по первому столбцу.

void MyClass::find(QString aFindString)
{
    int childCount = tree->invisibleRootItem()->childCount();
    if(aString != "")
    {
        QList <QTreeWidgetItem *> findList = tree->findItems(aFindString, Qt::MatchContains, 0);
        for(int i = 0; i < childCount; i++)
        {
            tree->invisibleRootItem()->child(i)->setHidden(true);
        }
        int findListSize = findList.size();
        for(int j = 0; j < findListSize; j++)
        {
            findList.at(j)->setHidden(false);
        }
    }
    else
    {
        for(int i = 0; i < childCount; i++)
        {
            tree->invisibleRootItem()->child(i)->setHidden(false);
        }
    }
}

Коннектим так:

QLineEdit *findEdit = new QLineEdit(this);
connect(findEdit,SIGNAL(textEdited(QString)),this,SLOT(find(QString)));
Метки записи: , , Нет комментариев
19Июн/110

Qt. Получение списка сетевых интерфейсов.

QList<QNetworkInterface> getInterface()
{
	//берем все интерфейсы, которые есть в системе
    QList<QNetworkInterface> networkInterfaces = QNetworkInterface::allInterfaces();

    for(int i = 0; i < networkInterfaces.size(); i++)
    {
        QFlags<QNetworkInterface::InterfaceFlags> _flags = networkInterfaces.at(i).flags();
	//если интерфейс выключен или если это вообще loopback
        if(!(QNetworkInterface::IsUp & _flags) || (QNetworkInterface::IsLoopBack & _flags))
        {
		//то убираем его из списка
            networkInterfaces.removeAt(i);
        }
    }
	//возвращаем список работающих и активных интерфейсов
    return networkInterfaces;
}

Метки записи: , , Нет комментариев
11Апр/110

QTableWidget. Запрет редактирования столбцов.

Проще всего делается через делегат.

class NonEditTableColumnDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    NonEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        return 0;
    }
};

Использование:

aTable = new QTableWidget(this);
aTable->setColumnCount(3);
//запрещаем редактирование первого столбца
aTable->setItemDelegateForColumn(0, new NonEditTableColumnDelegate());
//запрещаем редактирование второго столбца
aTable->setItemDelegateForColumn(1, new NonEditTableColumnDelegate());
//итого из трех столбцов редактироваться будет только последний
Метки записи: , , Нет комментариев