1

私はこれまでQtでアイテムのデリゲートを行ったことがなく、ドキュメントではより複雑なデリゲートについて十分に説明されていないと思います。

2つのスタイルのSymbian(^ 3)スタイルリストを作成する必要があります

タイプ1:

デリゲートスタイル1

これは一般的なナビゲーションリスト用であり、アイコンと下のラベルはオプションです。

タイプ2:

デリゲートスタイル2

これは設定リスト用で、プッシュボタンはトグル(オン/オフ)ボタンにすることも、コンテキストメニューを実行することもできます。

この種のアイテムデリゲートを作成するにはどうすればよいですか?

よろしく、ラット

4

2 に答える 2

2

私は一度似たようなものを作らなければなりませんでした。これが私がやった方法です。

私のデリゲートクラス宣言。ご覧のとおり、QLabel*labelというメンバーがあります。必要に応じて、別のラベルまたは押しボタンを追加できます。

class MyItemDelegate : public QStyledItemDelegate
{
public:
    explicit MyItemDelegate(QObject *parent = 0);
    ~MyItemDelegate();
protected:
    void paint(QPainter *painter,
               const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option,
                   const QModelIndex &index) const;
private:
    QLabel *label;
};

私のpaint()メソッドとsizeHint()メソッド。

QSize MyItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(!index.isValid())
        return QSize();
    QVariant data = index.data(Qt::DisplayRole);

    label->setText(data.toString());
    label->resize(label->sizeHint());
    QSize size(option.rect.width(), label->height());
    return size;
}

void MyItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(!index.isValid())
        return;
    QVariant data = index.data(Qt::DisplayRole);

    // Not necessary to do it here, as it's been already done in sizeHint(), but anyway.
    label->setText(data.toString());

    painter->save();

    QRect rect = option.rect;

    // This will draw a label for you. You can draw a pushbutton the same way.
    label->render(painter, QPoint(rect.topLeft().x(), rect.center().y() - label->height() / 2),
                  QRegion(label->rect()), QWidget::RenderFlags());

    painter->restore();
}

これがあなたが探していたものであることを願っています。幸運を!

于 2011-05-10T22:46:20.533 に答える
0

2つのオプションがあります、

1)QML-私の意見では、これはあなたがやろうとしていることを達成するための最良の方法であり、より簡単です。 例へのリンク

これは、リストビューにデリゲートを使用する方法を示しています。

2)QItemDelegate-サブクラスQItemDelegate次に、このデリゲートをリストビューに割り当て、 QItemDelegateにリンクします

于 2011-05-08T18:20:05.343 に答える