1

QTDesigner を使用して panel.ui ファイルを作成しました。これは QFrame クラスで、ラベルがほとんどない長方形です。そして、panel.ui の 3 つのインスタンスを挿入する QListWidget クラスがあります。を作成しQListWidgetItem、それを使用List->SetItemWidget(..)してリストに入力します。
結果は、3 つのパネルで満たされたリストです。また、dragDropMode internalMove を使用して、リスト内のパネルを移動することもできました。

また、パネルをクリックしたときにパネルを少し右にずらす機能もテストしましたが、うまくいきました。

in procedure List::mousePressEvent(QMouseEvent *event)    
Panel *child = static_cast<Panel*>(childAt(event->pos()))  
...   
int y= child->pos().y();   
int x = child->pos().x();   
child->move (x +10, y);   `

問題: アプリを実行してリストを表示するとき、すべてのパネルを右に 10 オフセットして表示したいと考えています。したがって、上記のようthis->setItemWidget(myPanelItem, myPanel);に使用しようとした後、リストコンストラクターとループ内myPanel->move()で動作していないようです。

アプリを実行すると、パネルがオフセットなしで表示されますが (理由はわかりません)、パネルをクリックするとずれます。

4

2 に答える 2

0

move()ウィジェットはレイアウト内にあるため、確実に機能しません。(まあ、のようなレイアウトではありませんQLayoutが、効果は同等です。たとえば、リストのサイズ変更やスクロールなど、アプリケーションのメトリックが変更されると、ウィジェットはリストウィジェットによって再配置されます。)

できることは、実際のウィジェットをレイアウトマージンのあるコンテナウィジェットでラップすることです。

QWidget* wrapIntoContainerForOffset(QWidget* widget, int offset /*in pixels*/) {
    QWidget* container = new QWidget;
    QHBoxLayout* layout = new QLayout(container);
    layout->setContentsMargins(/*left=*/ offset, /*others=*/ 0, 0, 0);
    layout->addWidget(widget);
    return container;
}

次に、代わりにこれらのコンテナをlistwidgetに追加します。

于 2013-01-18T21:34:22.153 に答える
0

スタイルシートを試しましたか。QListWidget は Box モデル ( http://doc.qt.digia.com/qt/stylesheet-customizing.html#box-model ) をサポートしています。そのため、スタイルシートで余白をいじってみるとよいでしょう。

スタイルシートのリファレンス: http://doc.qt.digia.com/qt/stylesheet-reference.html

于 2013-01-19T00:39:54.630 に答える