Russian Qt Forum
Апрель 19, 2024, 20:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 65 66 [67] 68 69
991  Qt / Пользовательский интерфейс (GUI) / Удаление пунктов меню из menuBar главного окна : Июнь 22, 2011, 17:04
Привет.
Добавляю в menuBar главного окна свои пункты меню так:
Код:
if(fmainMenu) //-- ссылка на menuBar() главного окна
    {
        fmainMenu->setUpdatesEnabled(false);
        if(!fconnMenu)
        {
            fconnMenu = new QMenu(trUtf8("Связь"));
            fconnMenu->addAction(trUtf8("Подключиться"),this,SIGNAL(connectToServer()));
            fconnMenu->addAction(trUtf8("Отключиться"),this,SIGNAL(disconnectFromServer()));
            fmainMenu->addMenu(fconnMenu);

        }

        if(!farchMenu)
        {
            farchMenu = new QMenu(trUtf8("Работа с архивом"));
            farchMenu->addAction(trUtf8("Реальное время"),this,SIGNAL(setRealtime()));
            for(ECList::iterator it=fecList->begin();it!=fecList->end();it++)
            {
                CEC * ec = *it;
                QAction * action = farchMenu->addAction(trUtf8("Просмотр архива ЭЦ%1").arg(QString::number(ec->ec_number)));
                action->setData(QVariant(ec->ec_number));
            }
        }
        fmainMenu->setUpdatesEnabled(true);
    }

у menuBar я не нашёл метода для удаления пунктов меню, только удаления QAction.
Сейчас удаляю так:
Код:
if(fmainMenu)
    {
        if(fconnMenu)
        {
            delete fconnMenu;
            fconnMenu = NULL;
        }
        if(farchMenu)
        {
            delete  farchMenu;
            farchMenu = NULL;
        }
    }
но в главном меню эти пункты остаются.
Как их убрать?
992  Qt / Пользовательский интерфейс (GUI) / Растяжка виджетов при изменении размера окна : Июнь 16, 2011, 11:16
Подскажите пожалуйста, какие свойства задавать виджетам, что бы они растягивались по форме при изменении размера окна?
Как в делфи свойство Align или Anchor.
Т.е. например надо, что бы метка имела фиксированный размер, а текстовое поле, которое рядом справа растягивалось до конца формы, и изменяло свой размер при изменении размера родительской формы.
можно ли обойтись без layout, так как не всегда получается нужный вид формы, если контролы помещать в них.
993  Qt / Пользовательский интерфейс (GUI) / Re: Перехват фокуса в дочерних виджетах : Июнь 09, 2011, 12:18
а где можно почитать про делегаты, в моем случае что бы реализовать подобный инспектор объектов, как в самом креаторе или наподобие делфи?
свойств отображаться будет не много, порядка 4-10, максимум 15.
994  Qt / Пользовательский интерфейс (GUI) / Re: Перехват фокуса в дочерних виджетах : Июнь 07, 2011, 13:59
я и вникну, но позже, так как надо сделать готовую прогу чем быстрее тем лучше, минимально работающий вариант.
995  Qt / Пользовательский интерфейс (GUI) / Перехват фокуса в дочерних виджетах : Июнь 07, 2011, 13:05
Пишу свой инспектор объектов для миниSCADA.
Создал наследника от QWidget EditableWidget, задача которого разместить в себе дочерний виджет (обычно это будет либо lineEdit либо textEdit).
При получении фокуса, будет рядом отображаться кнопка с текстом "...", при нажатии на которую нужно послать сигнал.
При потере фокуса кнопка исчезает. Суть понятна, это стандартная фишка всех инспекторов объектов.
Сами эти виджеты я распологаю в таблице методом setCellWidget. Про делегаты я слышал но пока не вникал. при чем, виджеты будут встраиваться разные.
Код:
QEditableWidget::QEditableWidget(QWidget *parent) :
    QWidget(parent)
{
    ftoolButton = NULL;
    feditableWidget = NULL;
    setFocusPolicy(Qt::ClickFocus);
}

void        QEditableWidget::setEditableWidget(QWidget  * EditableWidget)
{
    if(feditableWidget!=EditableWidget)
    {
        setUpdatesEnabled(false);
        if(feditableWidget)
        {
            setFocusProxy(NULL);
            delete feditableWidget;
            delete ftoolButton;
        }
        feditableWidget = EditableWidget;
        if(feditableWidget)
        {
            feditableWidget->setParent(this);
            feditableWidget->setFocusPolicy(Qt::NoFocus);
            feditableWidget->setGeometry(rect());
        }
        setUpdatesEnabled(true);
    }
}

void    QEditableWidget::focusInEvent(QFocusEvent * event)
{
    if(feditableWidget)
    {
        feditableWidget->setGeometry(rect().adjusted(-1,-1,geometry().width()-geometry().height(),0));
    }
    ftoolButton = new QToolButton;
    ftoolButton->setText("...");
    ftoolButton->setParent(this);
    ftoolButton->setGeometry(rect().adjusted(geometry().width()-geometry().height(),-1,-1,0));
    ftoolButton->show();
    connect(ftoolButton,SIGNAL(clicked()),this,SIGNAL(editButtonClicked()));
    QWidget::focusInEvent(event);
}

void    QEditableWidget::focusOutEvent(QFocusEvent * event)
{
    QWidget::focusOutEvent(event);
    delete ftoolButton;
    if(feditableWidget) feditableWidget->setGeometry(rect());
}
Проблема, как сделать так, что бы отловить событие получение фокуса моим виджетом, затем отобразить кнопку, а потом установить фокус ввода на дочерний виджет, при этом отловить потерю фокуса уже в дочернем виджете что бы кнопка исчезла.
996  Qt / Qt-инструментарий / ошибка сборки проекта при использорвании jom : Май 25, 2011, 16:35
решил заменить make на jom (win7, Qt 2010.04).
сразу при сборке проекта вылезло очень много ошибок, суть которых - не найдена библиотека <Q.....> (т.е. не находятся все стандартные либы).
я так понял jom не хавает стандартные пути, которые относятся к Qt?
997  Qt / Работа с сетью / Re: Корректное завершение нескольких клиентских потоков : Май 20, 2011, 12:45
вообще по плану будет 5 подключений к разным машинам, все одновременно будут получать данные с серверов. данные идут потоком, непрерывно каждые 250 мсек кадры по 4-8Кб. помимо того, в основном потоке еще идёт прорисовка в GraphicsScene около 1000 объектов + логика расчета состояний. поэтому резонно хотя бы чтение по сокетам перенести в одельные потоки. В целом пока этот механизм работает нормально.
998  Qt / Работа с сетью / Корректное завершение нескольких клиентских потоков : Май 19, 2011, 17:39
Есть несколько потоков (Qt шных), в которых идет прием по клиентским сокетам.
по нажатию кнопки, нужно корректно завершить все потоки, предварительно закрыв соединение в этих потоках.
Корректен ли такой подход, который привожу ниже:
код потока клиента
Код:
void    QMMNClientThread::run()
{
    mmnClient->connectToServer();
    exec();
}

void     QMMNClient::disconnectFromServer()
{
    fmustReconnect = false;
    if(fsocket->state() == QAbstractSocket::ConnectedState)
    {
        fsocket->close();
        fsocket->waitForDisconnected();
    }
}
при дисконекте клиента, выдерживаю паузу в 2 секунды и делаю реконтект и так вечно пока не надо принудительно завершить работу потока

Код:
void    CEC::startClient()
{
    for(int i=0;i<1;i++) //в будущем тут будет несколько потоков
    {
        if(!mmnClientThread[i]) mmnClientThread[i] = new QMMNClientThread(this); //создаем поток
        mmnClientThread[i]->mmnClient->remoteHost = Host[i]; //задаем к кому подключаться
        mmnClientThread[i]->mmnClient->remotePort = Port[i];
        connect(mmnClientThread[i]->mmnClient,SIGNAL(frameReceived(int)),this,SLOT(data_receive(int))); //обработка принятых данных
        connect(mmnClientThread[i]->mmnClient,SIGNAL(connected(int)),this,SLOT(chan_connected(int)));
        connect(mmnClientThread[i]->mmnClient,SIGNAL(disconnected(int)),this,SLOT(chan_disconnected(int)));
        connect(this,SIGNAL(disconnectClient()),mmnClientThread[i]->mmnClient,SLOT(disconnectFromServer())); //тут я буду слать сигнал потоку что бы он отключил сокет
        mmnClientThread[i]->start(); //запускаю поток
    }
}

void    CEC::stopClient()
{
    for(int i=0;i<1;i++)
    {
        if(mmnClientThread[i])
        {
            emit(disconnectClient()); //шлю сигнал сокету в потоке на принудительное отключение
            disconnect(mmnClientThread[i]->mmnClient); //отключаю все сигналы/слоты
            mmnClientThread[i]->quit(); //закрываю поток
            mmnClientThread[i]->wait(); //жду
            delete mmnClientThread[i]; //удаляю поток
            mmnClientThread[i] = NULL;
        }
    }
}
До этого я не слал сигнал в поток клиента, и иногда прога вылетала, так как сокет успевал подать сигнал о приеме данных, но сам поток уже уничтожен.
После внесения этой коррективы вроде бага на наболюдаю. Подскажите с точки зрения Qt грамотно ли я прибиваю сокет/поток?
999  Qt / Общие вопросы / Re: Регулярные выражения, просветите пжлста. : Май 15, 2011, 17:25
ок, спасибо, буду разбираться
1000  Qt / Общие вопросы / Регулярные выражения, просветите пжлста. : Май 15, 2011, 13:22
Посмотрел документацию по регулярным выражениям. Но не понял как мне реализовать следующее:
Есть строка, в которой нужно найти все слова, которые находятся между символами '%', или за одним символом %.
Затем получить список этих слов.
Как создать регулярное выражение что бы сработал поиск?
1001  Qt / 2D и 3D графика / Re: QGLWidget + OpenCv : Май 11, 2011, 11:47
предполагаю что ошибка в доступе памяти, проверьте указатели, размеры буферов.
1002  Qt / Пользовательский интерфейс (GUI) / Re: listWidget: как с каждой строкой хранить произвольный указатель? : Май 10, 2011, 10:37
спасибо, попробую ваш подход.
1003  Qt / Qt-инструментарий / Re: Медленная сборка в mingw под Win7 : Май 09, 2011, 20:17
параметр -j в винде ничего не дает, в линуксе дает небольшой прирост скорости
1004  Qt / Qt-инструментарий / Медленная сборка в mingw под Win7 : Май 09, 2011, 14:33
Хотел спросить, у всех на компиляторе mingw под виндой сборка идет ужасно медленно?
В линуксе идет все раз в 10 быстрее.
1005  Qt / Пользовательский интерфейс (GUI) / Re: listWidget: как с каждой строкой хранить произвольный указатель? : Май 09, 2011, 13:04
с точки зрения производительности при большом количестве элементов (1000 и выше) как быстро это будет работать?
Не знаю как в Qt, а в Делфи вариантный тип очень тяжелый в плане скорости/объема памяти и я всегда старался его избегать.
Страниц: 1 ... 65 66 [67] 68 69

Страница сгенерирована за 0.054 секунд. Запросов: 23.