Qt 如何在QBStractItemView中移动QWidget?

Qt 如何在QBStractItemView中移动QWidget?,qt,Qt,我有一个QComboBox,上面有很多项目: combo->addItem("def"); combo->addItem("abc"); 现在我想将QWidget添加到我的一个项目中,例如: QPushButton *button = new QPushButton; button->setStyleSheet("QPushButton {background:red}");

我有一个QComboBox,上面有很多项目:

    combo->addItem("def");
    combo->addItem("abc");
现在我想将QWidget添加到我的一个项目中,例如:

    QPushButton *button = new QPushButton;
    button->setStyleSheet("QPushButton {background:red}");
    button->setFixedSize(10,10);
    QModelIndex index = combo->model()->index(0,0);
    combo->view()->setIndexWidget(index, button);
我将按钮的大小设置为10x10(当然我的QComboBox更大)。我想把这个按钮移到另一个地方(图)


您可以尝试使用布局

QPushButton *button = new QPushButton;
button->setStyleSheet("QPushButton {background:red}");
button->setFixedSize(10,10);

auto widget = new QWidget{this};
auto layout = new QHBoxLayout{widget};
layout->setContentsMargins(0, 0, 0, 0);
layout->addStretch();
layout->addWidget(button);

QModelIndex index = combo->model()->index(0,0);
combo->view()->setIndexWidget(index, widget);

您可以尝试使用布局

QPushButton *button = new QPushButton;
button->setStyleSheet("QPushButton {background:red}");
button->setFixedSize(10,10);

auto widget = new QWidget{this};
auto layout = new QHBoxLayout{widget};
layout->setContentsMargins(0, 0, 0, 0);
layout->addStretch();
layout->addWidget(button);

QModelIndex index = combo->model()->index(0,0);
combo->view()->setIndexWidget(index, widget);

它的设计是这样的,小部件应该占据单元格中的整个空间。在另一侧,使用
按钮->设置固定大小(10,10)您将其宽度和高度限制为10像素,因此小部件“挂起”在左上角。你要做的就是通过代表来实现。但是,为了给您一个更具体的答案,应该分享有关所需行为的更多详细信息。@user6528273谢谢您的回答。我同意你的观点,我应该使用代理,但我不知道如何使用。这是我的全部代码(仅创建QComboBox,向其中添加项目,创建QPushButton,设置其大小,将按钮添加到combo->view())。这是您的代码,但不是您的意图。这个函数应该如何使用?请描述您的用例。@user6528273当我单击QPushButton时,我想从QComboBox中删除该项。我必须使用QComboBox(没有QListWidget)。然后让我试着为您组合一些东西。它的设计是这样的,小部件应该占据单元格中的全部空间。在另一侧,使用
按钮->设置固定大小(10,10)您将其宽度和高度限制为10像素,因此小部件“挂起”在左上角。你要做的就是通过代表来实现。但是,为了给您一个更具体的答案,应该分享有关所需行为的更多详细信息。@user6528273谢谢您的回答。我同意你的观点,我应该使用代理,但我不知道如何使用。这是我的全部代码(仅创建QComboBox,向其中添加项目,创建QPushButton,设置其大小,将按钮添加到combo->view())。这是您的代码,但不是您的意图。这个函数应该如何使用?请描述您的用例。@user6528273当我单击QPushButton时,我想从QComboBox中删除该项。我必须使用QComboBox(没有QListWidget)。然后让我试着为您组合一些东西。完美。谢谢:)你测试过这个吗?我刚测试过。必须稍微更改边距并添加一个缺少的分号,但就是这样。太好了。谢谢:)你测试过这个吗?我刚测试过。必须稍微更改边距并添加缺少的分号,但仅此而已。