LINUX.ORG.RU

Сообщения twentypercentcooler

 

Перетащить виджет в другой layout

Форум — Development

Привет. Как правильно переносить виджеты из одного лэйаута в другой? Есть несколько виджетов, в каждом из них свой лэйаут, нужно перетаскивать элементы из одного виджета в другой. Минимальный пример тут: https://github.com/twentypercentcooler/qtlayouts Проблема вот в чем - все нормально перетаскивается, но потом все ломается. Чтобы сломалось нужно - перетаскивать внутри одного виджета, потом перетащить в другой, а потом снова перетаскивать внутри первого. Должно получиться то, что на картинке в гитхабе. Тестировал на винде и линуксе, Qt5.4.

dropEvent, emptycolorwidget.cpp:

if (de->source() == this) {
        return;
    }
    
    EmptyColorWidget *v = qobject_cast<EmptyColorWidget *>(de->source());
    if (v != nullptr) {
        de->acceptProposedAction();
        emit swap(v, this);
        return;
    }
Далее ловлю этот сигнал в GridWidget::swap(EmptyColorWidget *w1, EmptyColorWidget *w2), если оба элемента в одном виджете, то тут же их и меняю, если нет, то посылаю сигнал дальше, чтобы поменять окна и обрабатываю уже тут:
void multiscreen::swap(EmptyColorWidget *v1, EmptyColorWidget *v2)
{
    if (v1 == nullptr || v2 == nullptr) {
        qDebug() << "widget is null";
        return;
    }

    auto pos1 = v1->getPosition();
    auto pos2 = v2->getPosition();

    auto gw1 = grid_widgets[pos1.display_number];
    auto gw2 = grid_widgets[pos2.display_number];

    gw2->remove(v2);
    gw1->remove(v1);

    gw2->add(v1, pos2);
    gw1->add(v2, pos1);

    v2->savePosition(pos1);
    v1->savePosition(pos2);
}

 

twentypercentcooler
()

Не рисуется виджет

Форум — Development

Привет. Почему не работает код - не отображается кастомный виджет в лэйауте? Если создавать просто виджет - все ок.

//QWidget *w = new QWidget(); //Если раскомментировать, и закомметировать нюжнюю, то все отображается.
CustomWidget * w = new CustomWidget();
w->setStyleSheet("background: rgb(90,90,90);");
l->addWidget(w, row / size, col % size);

CustomWidget это просто наследник виджета.

class CustomWidget : public QWidget
{
    Q_OBJECT

public:
    CustomWidget(QWidget *parent = (QWidget *)0);
    ~CustomWidget();

 ,

twentypercentcooler
()

Помогите со скриптом

Форум — Development

Привет. Не могу написать скрипт, который бы заменял шаблонную строку в файле на заданную.

Делаю так:

#!/bin/bash

declare sources=$(find . -type f -name "*.cpp" | awk '{print substr($0,3)}')

echo "$sources"

sed -i 's/_SRC_LIST_/'"$sources"'/g' sources.txt

Может ошибка в том, что в $sources есть переводы строк и пробелы?

 ,

twentypercentcooler
()

Передача сигнала в qt в качестве параметра

Форум — Development

Всем привет. Можно ли в qt передать указатель на сигнал в метод? Например, хочу делать так

...
signals:
   void foo();
...

void A::sendSignal(signal_type signal) {
   //что-то делаю
   emit signal;
   //что-то делаю
}

А использовать, соответственно, так

void A::fooBar() {
   sendSignal(SIGNAL(foo));
}

Осталось определить только signal_type, только как это сделать? Гуглил, ничего не нашел.

 , ,

twentypercentcooler
()

Поясните про fork.

Форум — Development

Здравствуйте, господа. Суть такова - хочу, чтобы был главный процесс, который бы висел в event loop'е. При наступлении определенного события, порождал новый процесс и выполнял задачу, а главный, так и висел в своем цикле. Я знаю, как это сделать через треды, но хочу именно через форк. Покидайте советов чтоли или книжек, а то я погуглил, ничего дельного не нашел.

while(1) {
   wait event
   //при наступлении события делать fork какой-то хитрый, который будет выполнять
   //код в другом процессе. А родительский так и продолжит ждать события.
}

Как я понял, если просто вызвать fork(), то в цикле будут висеть оба процесса и все портить.

 ,

twentypercentcooler
()

Не могу настроить unixODBC

Форум — General

Здравствуйте! В общем, суть такова, что не могу настроить драйвер odbc для оракла. ОС - Centos 6.5. Я скачал unixODBC, собрал его и установил. Также поставил oracle instant clientODBC в каталог /usr/lib/oracle/11.2/client64. Содержимое файлов odbc.ini

[XE]
Driver = OracleDriver
DSN = XE
ServerName = 127.0.0.1
UserID = SYSTEM
Password = system
odbcinst.ini
[OracleDriver]
Description     = Oracle ODBC driver for Oracle 11g
Driver        = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
Setup           =
FileUsage       =
CPTimeout       =
CPReuse         = 
Эти файлы лежат в каталоге /usr/local/etc

Далее запускаю isql -v XE и получаю ошибку

[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : file not found
Хотя такой файл существует и в PATH и LD_LIBRARY_PATH пути до него прописаны.

 ,

twentypercentcooler
()

RSS подписка на новые темы