LINUX.ORG.RU

Сообщения lazgo

 

QComboBox выпадающий список перехватывает фокус

 ,

Приветствую. Задача такая: нужно сделать комбобокс с полем ввода, чтобы список обновлялся в зависимости от того, что ввели. Не могу понять, как сделать, чтобы список не перехватывал фокус. На данный момент получается так: изменяем текст, список обновляется, но фокус на списке, и дальше изменять текст не получается, нужно кликнуть мышкой, чтобы список закрылся и стало активным поле ввода. Подскажите как это обойти? Минимальный пример:

#include <QApplication>
#include <QMainWindow>
#include <QComboBox>
#include <QVBoxLayout>
#include <QStringList>
#include <QLineEdit>
 
 
class MainWindow : public QMainWindow
{
    QComboBox* cb;
    QStringList ports = { "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyM1", "/dev/ttyM2" };
public:
    MainWindow(QWidget* parent = nullptr) : QMainWindow(parent)
    {
        QWidget* central = new QWidget(this);
        QVBoxLayout* layout = new QVBoxLayout(central);
        cb = new QComboBox(this);
        cb->addItems(ports);
        cb->setEditable(true);
        connect(cb, &QComboBox::editTextChanged, this, &MainWindow::textEdit);
        layout->addWidget(cb);
        setCentralWidget(central);
    }
public slots:
    void textEdit(const QString& text)
    {
        cb->blockSignals(true);
        cb->clear();
        if (text.isEmpty())
            cb->addItems(ports);
        else
        {
            QStringList filter;
            for (const QString& port : ports)
            {
                if (port.contains(text, Qt::CaseInsensitive))
                    filter.append(port);
            }
            cb->addItems(filter);
        }
        cb->setEditText(text);
        cb->showPopup();
        cb->lineEdit()->setFocus();
        cb->blockSignals(false);
    }
};
 
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    MainWindow window;
    window.show();
    return app.exec();
}
lazgo
()

Установка зависимостей deb пакета без интернета

 ,

Привет всем, есть deb пакет наш, у него есть одна зависимость, есть задача заставить его устанавливается без интернета, зависимость скачал с помощью

sudo apt install --download-only <имя пакета>

в /var/cache/apt/archives/ получил deb пакеты, запихал их в наш пакет. Теперь вопрос, как их установить после установки нашего deb пакета? Желательно минимум ручных действий, то есть в идеале пользователь написал

sudo apt install ./<имя пакета>

и все установилось. Пробовал сделать установку через скрипт postinst, но получаю взаимную блокировку dpkg. Может быть вообще не правильно делаю, и есть другой способ? Спасибо.

lazgo
()

Связка dart и c++

 ,

Приветствую всех. Пару недель назад была новость про эту поделку - https://github.com/G-Ray/pikatorrent, в новости было написано что написан на dart и c++. Стало интересно, как же они это сделали, но в репе не нашел c++, кроме как сгенерированного от flutter. Отсюда вопрос: у кого-нибудь есть опыт реального соединения dart и c++? А не как в репе, все сделано на flutter.

lazgo
()

Алиасы для функций в библиотеке .so

 ,

Приветствую всех. Вопрос такой, занимаюсь портированием ПО c Windows на Linux, и столкнулся с проблемой, что имена функций в библиотеке с маленькой буквы, а второе ПО динамически подключает эту библиотеку и ищет функции с большой буквы. В винде это решили через def файл, где написали такие строчки:

EXPORTS
Sign_int16=sign_int16
Sign_int32=sign_int32
Sign_real32=sign_real32
 
и так далее

А в линуксе есть аналог def файлов?

Нагуглил, что можно использовать attribute((alias)), но это просто безумие, функций много, больше тысячи, я с ума сойду)) Так же можно просто переписать имена, или вызовы сделать правильные, но опять же, это очень трудоемко.

Может есть еще варианты? Спасибо.

lazgo
()

Вопрос по компиляторам/трансляторам

 ,

Вопрос по транслятору, не знаю в какую ветку задать вопрос, если что, простите…

Приветствую всех, вопрос такой, есть транслятор в байт код самодельного языка на базе паскаля, на винде. Задача: переписать этот транслятор на юникс, с сохранением поддержки старых проектов с винды.

Столкнулся с проблемой кодировок, на юниксе кодировка utf-8, на винде кодировка CP1251, транслятор написан на основе лексического анализатора flex, он не понимает unicode, для него должно быть один символ - один байт, соответственно если текст в кодировке utf-8, он не понимает ничего. В данный момент я костылю перекодированием с помощью iconv, но чую что это дичь))

Прошу совета, стоит ли переписывать транслятор на новый анализатор, погуглил, есть re-flex и типо он подерживает все старые команды из flex, то есть по сути ничего особо переписывать и не нужно будет, но чет я не уверен))

Если у кого есть мысли или опыт, подскажите, стоит ли перекатываться на новый анализатор, или дальше костылить с перекодировкой строк.

Добавлю еще, что на эту работу (на перекат на новый анализатор) мне выделят месяц, максимум, полтора, если кто то знает подводные камни, буду рад советам.

Спасибо!

lazgo
()