gpt4 book ai didi

c++ - 将 QListView 添加到 QComboBox 以正确显示滚动条

转载 作者:太空狗 更新时间:2023-10-29 23:02:57 48 4
gpt4 key购买 nike

我有一个带有长文本的组合框以适合组合框,所以当我下拉时,它们显示为“very_long...long_text”。

当我这样做时:

QAbstractItemView* view = myCombo->view();
view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn );

出现了水平滚动条,但它处于非事件状态并且 ...-s 仍然存在于字符串的中间。

bugreport说要获得水平滚动条,可以使用自定义 QListView。那么我应该如何构造这个自定义 QListView,然后将其添加到组合框?

我尝试了以下方法。

QListView* lw = new QListView( 0 );

QStandardItemModel* model = new QStandardItemModel;

QStandardItem *item = new QStandardItem( "long long long long long long long long long long long long text 1" );
QStandardItem *item2 = new QStandardItem( "long long long long long long long long long long long long text 2" );

model->insertRow( 0, item );
model->insertRow( 1, item2 );

lw->setModel( model );

QWidget* test = new QWidget( 0 );
test->setGeometry( 100, 100, 100, 150 );
test->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );

QGridLayout* layout = new QGridLayout;

test->setLayout( layout );

layout->addWidget( lw );
layout->setSizeConstraint( QLayout::SizeConstraint::SetFixedSize );

test->show();

然后我有我想看的东西(不幸的是我不允许附加图像),有滚动条。

但是当我想将其添加到组合中时:

QListView* lw = new QListView( 0 );

QStandardItemModel* model = new QStandardItemModel;

QStandardItem *item = new QStandardItem( "long long long long long long long long long long long long text 1" );
QStandardItem *item2 = new QStandardItem( "long long long long long long long long long long long long text 2" );

model->insertRow( 0, item );
model->insertRow( 1, item2 );

lw->setModel( model );

QWidget* test = new QWidget( 0 );
test->setWindowTitle( "test" );
test->setGeometry( 100, 100, 100, 150 );
test->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );

QGridLayout* layout = new QGridLayout;

test->setLayout( layout );

QComboBox* combo = new QComboBox;
combo->setGeometry( 0, 0, 80, 20 );
combo->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
combo->setView( lw );

layout->addWidget( combo );
layout->setSizeConstraint( QLayout::SizeConstraint::SetFixedSize );
test->show();

然后我得到一个空组合。感谢您的回答。

最佳答案

您需要为 ListView 设置固定宽度,并在调整组合框大小时更新它。您还需要调整 ListView 的弹出窗口宽度。您可以使用事件过滤器来做到这一点。这是一个概念验证实现(不要在生产中以这种风格编写):

class Test_class : public QObject {
Q_OBJECT
public:
Test_class() {}
virtual ~Test_class() {}

QComboBox* combo_box;
QListView* list_view;
bool eventFilter(QObject *object, QEvent *event) {
if (object == combo_box && event->type() == QEvent::Resize) {
list_view->setFixedWidth(combo_box->width());
} else if (object == list_view && event->type() == QEvent::Show) {
list_view->window()->resize(list_view->width(), list_view->window()->height());
}
return false;
}
};

//...
test->show();
lw->setFixedWidth(200);
lw->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

Test_class test_object;
test_object.combo_box = combo;
test_object.list_view = lw;
lw->installEventFilter(&test_object);
combo->installEventFilter(&test_object);

关于c++ - 将 QListView 添加到 QComboBox 以正确显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26975952/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com