Записи пользовательского поля со списком Qt сдвигаются вниз, когда элемент предварительно выбран.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Записи пользовательского поля со списком Qt сдвигаются вниз, когда элемент предварительно выбран.

Сообщение Anonymous »

Я работаю над собственным списком с кнопками удаления для каждой записи. Я оставил кнопки и код, которые не имеют отношения к проблеме. После создания поля со списком я хочу предварительно выбрать запись в mainwindow.cpp. Если я выберу индекс меньше 10, все в порядке. Для значений индекса более 10 метки записей смещаются вниз в зависимости от фактического значения индекса, а подсказки отображаются правильно. Все это происходит в Windows с Qt 5.15.2. Я также тестировал Qt 6.6.3, проблем нет. Я думаю, что это ошибка Qt, но укажите, пожалуйста, если я делаю что-то неправильно. Мне также интересно, смогу ли я избавиться от проблемы с Qt 5.15.2.
Записи в порядке с cb->setCurrentIndex(1);:
< img alt="cb->setCurrentIndex(1);" src="https://i.sstatic.net/KYYgn1Gy.png" />
Записи сдвигаются на две строки вниз с помощью cb->setCurrentIndex(11);:
Изображение

// main.cpp
#include "mainwindow.h"
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

// mainwindow.h
#include
#include "comboboxwithremovebutton.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
ComboBoxWithRemoveButton* cb;
QWidget *window;
};

// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

cb = new ComboBoxWithRemoveButton(this);
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->addWidget(cb);

window = new QWidget(this);
window->setLayout(hlayout);
setCentralWidget(window);

cb->setMinimumSize(310, 28);
cb->addItems({"1111", "2222", "3333", "4444", "5555", "6666", "7777", "8888", "9999", "0000", "1111", "2222", "3333"});
cb->setCurrentIndex(11);
}

MainWindow::~MainWindow()
{
delete ui;
}

// comboboxwithremovebutton.h
#ifndef COMBOBOXWITHREMOVEBUTTON_H
#define COMBOBOXWITHREMOVEBUTTON_H

#include
#include
#include
#include

class ComboBoxWithRemoveButton;

class ComboBoxWidget : public QWidget
{
Q_OBJECT
public:
ComboBoxWidget(QString text, ComboBoxWithRemoveButton *cb, QWidget* parent = 0);

public:
QHBoxLayout *horizontalLayout;
QLabel *label;
};

class ComboBoxWithRemoveButton : public QComboBox
{
Q_OBJECT
public:
ComboBoxWithRemoveButton(QWidget *parent = 0);
void addItems(const QStringList &texts);
private:
QListWidget *listWidget;

};

#endif // COMBOBOXWITHREMOVEBUTTON_H

// comboboxwithremovebutton.cpp
#include "comboboxwithremovebutton.h"

#include
#include

ComboBoxWithRemoveButton::ComboBoxWithRemoveButton(QWidget* parent) : QComboBox(parent)
{
listWidget = new QListWidget(this);
setModel(listWidget->model());
setView(listWidget);
}

void ComboBoxWithRemoveButton::addItems(const QStringList &texts)
{
for(const QString& e : texts) {
QListWidgetItem *listWidgetItem = new QListWidgetItem(listWidget);
listWidgetItem->setToolTip(e);
ComboBoxWidget *comboBoxWidget = new ComboBoxWidget(e, this);
listWidgetItem->setSizeHint(comboBoxWidget->sizeHint());
listWidget->addItem(listWidgetItem);
listWidget->setItemWidget(listWidgetItem, comboBoxWidget);
view()->setCurrentIndex(model()->index(currentIndex(), 0));
}
}

ComboBoxWidget::ComboBoxWidget(QString text, ComboBoxWithRemoveButton *cb, QWidget* parent) : QWidget(parent)
{
horizontalLayout = new QHBoxLayout();
label = new QLabel(text);
horizontalLayout->addWidget(label);
setLayout(horizontalLayout);
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... reselected
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Биты и байты сдвигаются в C++
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Биты и байты сдвигаются в C++
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Биты и байты сдвигаются в C++
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Временные метки, написанные java.sql.SQLData, сдвигаются на определенное количество часов в часовом поясе
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Попытка добавить маркеры для карты Trimble в React с JavaScript SDK, но маркеры сдвигаются с карты, а не при введенном L
    Anonymous » » в форуме Javascript
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»