crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику SABROG ::: Спасибо сказали: 229 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
9.12.2009, 15:34 Как создать группу кнопок (buttonGroup) в Дизайнере?
Цитата(Andrewshkovskii @ 9.12.2009, 15:17) *
и туда кнопочек напихать?


Нет, тебе нужно выделить все кнопки, которые ты хочешь поместить в группу. Затем кликнуть правой кнопкой мышки и выбрать "Назначить новую группу кнопок"->"Новая группа кнопок". В коде уже использовать указатель на buttonGroup, создать слот в главном окне типа on_buttonGroup_buttonClicked(QAbstractButton * button).

   //обнулим матрицу
    for (int i=0;i<30;++i)
         for(int j=0;j<30;++j)
             matrix[i][j]=0;


Этот способ обнуления конечно работает, но так имхо будет правильней:

memset(matrix, 0, sizeof(matrix));
Andrewshkovskii,
9.12.2009, 14:56 [РЕШЕНО] Разбиение картинки на области
Молодец. Чтобы небыло "китайщины" с getButtons() используй класс QButtonGroup. В группу кнопки можно поместить прямо из дизайнера.

    for(int i=0;i<diffVec.size();++i)
    {
        bufstr.replace(QString("%1"),diffVec[i].first);
        bufstr.replace(QString("%2"),QString::number(diffVec[i].second));
        lst << bufstr;
        bufstr="Думаю, %1 на %2%";
    }


Тут у тебя тоже жестоко :)

//resultModel.removeRows(0,resultModel.rowCount()); это лишнее, прошлая модель и так затрется сама
...
QStringList lst;
    for(int i=0;i<diffVec.size();++i)
    {
        lst << QString("Думаю, %0 на %1%").arg(diffVec[i].first).arg(diffVec[i].second);
    }


Если покопаться, то можно еще много чего найти. Короче есть куда стремиться :)
Andrewshkovskii,
7.12.2009, 23:08 [РЕШЕНО] через eventFillter Узнать какой объект создал эвент
Цитата(Andrewshkovskii @ 7.12.2009, 22:53) *
Получается, что если я использую QLabel для отображения Pixmap'а, то надо определять свой виджет, наследуясь от QLabel?...

Ага. Но если не хочется, то и installEventFilter() подойдет.
Andrewshkovskii,
7.12.2009, 18:09 [РЕШЕНО] Отрисовка QPainter'ом на QPixmap'e
Всё, память ко мне вернулась.

#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtGui/QPainter>
#include <QtGui/QPixmap>
#include <QtGui/QApplication>

int main( int argc, char *argv[] )
{
    QApplication app(argc, argv);
#if 1
    QPixmap pix( 100, 100 );
#else
    QPixmap pix;
#endif
    QPainter p( &pix );
    p.fillRect( QRect( 0, 0, pix.size().width(), pix.size().height() ), QBrush( Qt::white ) );
    p.setPen( QPen( Qt::red ) );
    p.drawRect( 10, 10, 80, 80 );
    pix.save( "test.png" );
    return 0;
}


Если точный размер картинки не выставлять, то получишь такое в консоли:

QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::setPen: Painter not active
QPainter::drawRects: Painter not active


Вот здесь косяк скорее всего:

inputPixelsNetPixmap = new QPixmap(ui->inputSymbolPixelsNet->size());


В конструкторе главного окна виджеты еще не инициализированы и их размер может быть нулевым. Тебе нужно поймать момент, когда все окна уже отображаются и работает главный цикл. Сделать это можно через QTimer::singleShot(). Ну или жестко задать начальные размеры.
Andrewshkovskii,
7.12.2009, 14:39 QToolBar
Цитата(flankerr @ 7.12.2009, 13:04) *
Как узнать общую ширину всех элементов занимаемых на тулбаре ?
Теоретически это возможно. Нужно получить layout тулбара и получить доступ к списку, в котором содержатся QLayoutItem, а там уже geometry().

Цитата(flankerr @ 7.12.2009, 13:04) *
И можно ли изменить выравние элементов тулбара, по умолчанию они пржимаються к левому краю, а если мне допустим надо центоровать или чтобы прижимались к правому краю ?
Попробовать можно. Опять же нужен доступ к layout, а там уже QLayout::setAlignment()
flankerr,
7.12.2009, 0:30 [РЕШЕНО] Разбиение картинки на области
Цитата(Andrewshkovskii @ 6.12.2009, 23:54) *
Да не..это-то понятно, но вопрос в том, можно ли отрисовывать path на pixmap'е.


Классический пример Scribble Example. QLabel разве что только для отображения "Сеток пикселей"
Andrewshkovskii,
6.12.2009, 13:05 Вывод даты в определенном формате
QString mydate(date.toString(Qt::ISODate));
++Norton++,
1.12.2009, 16:25 Qt 4.6.0
Цитата(Litkevich Yuriy @ 1.12.2009, 16:18) *
однако архива с исходниками под все платформы почему-то нет :(


Вот он, вроде бы: ftp://ftp.trolltech.com/qt/source/qt-ever...rc-4.6.0.tar.gz
Litkevich Yuriy,
23.11.2009, 9:26 Нужна помощь QSqlTableModel + QTableView
Попробуй вместо "GROUP" написать что-нибудь другое "GRP" например. Может быть БД или Qt думают, что это ключевое слово "GROUP BY". Кстати если так модели каждый раз создавать заново, то у тебя утечка памяти будет.
bayah,
15.11.2009, 16:58 Disable frame focus rect
Я пока знаю только 2 варианта и оба с недостатками.

Первый это вызвать QWidget::setFocusPolicy(Qt::NoFocus), недостаток в том, что кнопку теперь кроме как мышкой больше никак не нажать и фокуса у такой кнопки вообще нет.

Второй вариант это использовать прокси для стиля и переопределить в своем стиле метод QStyle::drawPrimitive(), если метод получает в качестве параметра PE_FrameFocusRect, то игнорить. Главное тут стиль установить только для нужных виджетов, а не для всего приложения.
DEADHUNT,
9.11.2009, 10:21 Как использовать WorldTimeClock (из дизайнера)?
Еще надо сделать дополнительные телодвижения с .pro файлом в FAQ'e троллей написано.
Litkevich Yuriy,
5.11.2009, 16:39 Диалог со скрытыми дополнительными настройками Kagami,
2.11.2009, 12:41 Плавающие QDockWidget.
Цитата(Litkevich Yuriy @ 1.11.2009, 22:42) *
Цитата(DEADHUNT @ 2.11.2009, 1:23) *
есть много QDockWidget`s соединённых через tabifyDockWidget как можно показать определённый DockWidget?
поищи по форуму, кто-то основательно озадачивался вопросом программного управления QDockWidget`ов, не помню кто именно.

Кто же еще мог заморачиваться :lol:
В блоге даже написал по этому поводу. И это еще, чтобы показать нужный виджет.
DEADHUNT,
1.11.2009, 19:04 Статическая сборка Qt-4.4.3 без зависимости от mingwm10.dll
Ключ -no-exceptions добавил, когда пересобирал Qt? mingwm10.dll как раз отвечает за работу исключений в разных потоках.

Если брать mkspecs для g++, то там линковка mthreads идет, если исключения включены, а mthreads требует как раз mingwm10.dll:

QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
Litkevich Yuriy,
28.10.2009, 23:36 QPaintEvent, installEventFilter, QPainter, Overpainting
Не должно muzhik'у быть одному, поэтому я склепал ему бабу.



Решил попробовать схожий метод перехвата эвентов, но уже в глобальном виде - через переопределение QApplication::notify(). Принцип почти такой же за исключением того, что здесь не нужно использовать installEventFilter и рекурсию по детям.

bool MyApplication::notify(QObject *receiver, QEvent *event)
{
    if (QEvent::Paint == event->type() && m_overWidget) {
        bool ret = QApplication::notify(receiver, event);
        QWidget *widget = qobject_cast<QWidget *>(receiver);
        if (!m_overWidget->isAncestorOf(widget))
            return ret;
        QPainter painter(widget);

        QWidget *parent = widget;

        while(parent && parent->parentWidget() && (parent->parentWidget() != m_overWidget))
            parent = parent->parentWidget();

        if (parent != m_overWidget) {
            QPoint point = widget->mapTo(parent, parent->pos());
            QRect rect = widget->rect().translated(point);

            painter.setWindow(rect);
        }

        painter.drawPixmap(m_pix.rect(), m_pix);
        return ret;
    }
    return QApplication::notify(receiver, event);
}


В примере используется .mng анимация с классом QMovie. Есть баги, требующие доработки.

Исходники.
Litkevich Yuriy,
23.10.2009, 22:47 рисование на QWidget
Цитата(vanvo @ 23.10.2009, 22:18) *
Т.е. в слоте нужно создавать событие?


Обычно update()/repaint() для этого подходят. Только нужно почитать документацию для каких случаев какой метод лучше использовать.

      p = new QPainter(this);
      p->setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::RoundCap));
      p->setBrush(QBrush(Qt::black, Qt::SolidPattern));
      p->drawEllipse(0, 0, x, y);
      p->end();
   }
private:
      QPainter *p;


Смахивает на утечку памяти...
vanvo,
21.10.2009, 8:10 QLineEdit с боковым addWidget JuryS1806,
19.10.2009, 8:28 Изменение размера распорки в QGridLayout
Вот так у меня работает. Увеличиваю высоту распорки на 10 пикселей.

        QSpacerItem *spacer = ui->verticalSpacer;
        const QSize size = spacer->sizeHint();
        spacer->changeSize(size.width(), size.height() + 10);
        //spacer->invalidate();


В документации написано, что нужно делать invalidate, что бы это не значило, но работает и без него. Пробовал не с QGridLayout, а с QVBoxLayout.
Andrewshkovskii,
15.10.2009, 18:05 Style Sheet: цвет текста в выделенной ячейке QTableView
QTableView::item:selected {
    background: #ece9d8;
    color: blue;
}
DarkAngel,
8.10.2009, 17:45 свойства файла вкладка "сводка" как заполнить ?
Это только в винде есть такое. Надо создавать файл ресурсов .rc, а потом подрубать также как и иконку в .pro файле:

win32:RC_FILE += rs.rc


Возможные ключи:

http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx

Примеры там же, если кликать по ссылкам на интересующий ключ.

То, что тебе нужно называется VERSIONINFO: http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx
flankerr,
17.9.2009, 20:54 QHeaderView Как узнать ширину ВСЕЙ области заголовка ?
Цитата(flankerr @ 17.9.2009, 19:32) *
SABROG, а можно более подробно ?


Предыстория такова. Обычно для инициализации некоторых данных используется конструктор виджета, в то время как сам виджет еще не показывается на экране, он еще не создан, у него нет каких-то валидных размеров, валидных координат, еще не сработали компановщики, которые меняют как положение виджета, так и его размер. Поэтому нам необходимо выполнить некоторый метод уже после того, как виджет выполнит все действия по инициализации и будет готов к работе с пользователем. Обычно возвращение в цикл событий или запуск цикла событий говорит о том, что всё готово к работе и можно всё потрогать. Поэтому у нас только один вариант - дождаться цикла событий и выполнить нужный нам метод. Сделать это можно - поставив в очередь выполнение слота. Варианта 2: QTimer::singleShot() или QMetaObject::invokeMethod() с параметром Qt::QueuedConnection.

Не знаю почему, но тролли предпочитают именно QMetaObject::invokeMethod() в таких приложениях как:
/examples/dbus/pingpong
/examples/dbus/remotecontrolledcar
/examples/network/torrent
/examples/xmlpatterns
/demos/browser
/demos/sqlbrowser
/tools/assistant
/tools/designer
flankerr,
14.9.2009, 17:11 Чтение строк из файла с escape-символами
QHeaderView не понимает управляющих символов C++. Дай ему реальный байт 0A и все.
Andrewshkovskii,
14.9.2009, 8:18 QNetworkAccessManager
Цитата(bo0blik @ 14.9.2009, 8:13) *
правильные решения этой проблемы


Правильное решение проблемы - не использовать циклы while/for, а использовать сигналы и слоты.

Цитата(bo0blik @ 14.9.2009, 8:13) *
Насколько я понял этот луп просто напросто будет выключатся при помощи сигнала о завершении запроса и слота выхода из лупа.

Угу exec()/quit()
bo0blik,
13.9.2009, 23:12 работа с процессами
Цитата(abra @ 13.9.2009, 23:21) *
Походу я её не подключил=)))))))
Её собрать надо,или что?(признаюсь,INSTALL.txt не читал до этого) :blush2:
Я просто взял,копернул .cpp и .h в директорию.
Походу этого маловато будет=)))
Оке.Сейчас установлю=)

Если уж копернул, то .cpp файлы надо тоже в .pro файл добавить. В общем в любом случае придется в .pro файл лезть.
abra,
13.9.2009, 21:57 QNetworkAccessManager
Этот класс не обладает такой возможностью. На крайняк можно создать экземпляр QEventLoop в методе и выходить из цикла событий, когда придет сигнал о завершении запроса.
bo0blik,

7 страниц V  < 1 2 3 4 5 > » 
RSS Текстовая версия Сейчас: 23.4.2024, 19:39